给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
来源:力扣(LeetCode)
这道题的输入是整数类型,首先负数肯定并非回文数,那么对于正数,我们可以使用前面说的整数反转,如果反转出来和原来的数值相等,那么就是回文数,否则不是回文数:
首先定义结果为:sum = 0
用123作为例子,对 10 整除的结果是 12 ,余数是 3 , sum = sum * 10 + 3 = 3
12 对 10 整除的结果是 1,余数是 2,sum = sum * 10 + 2 = 32
1 对 10 整除的结果是 0,余数是 1,sum = sum * 10 + 1 = 321
核心的代码无非是:
sum = sum * 10 + x % 10;
x = x / 10;
123不等于321,所以不是回文数,这道题没有坑点,java代码如下:
class Solution {
public static boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
int sum = 0;
int temp = x;
while (temp != 0) {
sum = sum * 10 + temp % 10;
temp = temp / 10;
}
if (sum == x) {
return true;
} else {
return false;
}
}
}
C++ 代码如下:
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
int sum = 0;
int temp = x;
while (temp != 0) {
sum = sum * 10 + temp % 10;
temp = temp / 10;
}
if (sum == x) {
return true;
} else {
return false;
}
}
};
int main(){
Solution solution;
cout<< solution.isPalindrome(12321)<<endl;
return 0;
}
空间复杂度为O(1),时间复杂度为O(logn)。
【作者简介】
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。个人写作方向:Java源码解析,JDBC,Mybatis,Spring,Redis,分布式,剑指Offer,LeetCode等,认真写好每一篇文章,不喜欢标题党,不喜欢花里胡哨,大多写系列文章,不能保证我写的都完全正确,但是我保证所写的均经过实践或者查找资料。遗漏或者错误之处,还望指正。
平日时间宝贵,只能使用晚上以及周末时间学习写作 - END -