题目链接 => 戳这里
解析
我们从题目中就可以知道如果输入的整数是负数,那么这个数就一定不是回文数,那么还有没有其他特例情况呢?我们考虑一下结尾是0的数,如果这个数不是0,而是10,20这种,那么也一定不是回文数。那么正常情况下如何判断一个整数是否为回文数呢?
1.反转整个整数,通过 x % 10的方式,我们每次可以拿到x最后一位的数,然后通过x = x / 10的方式去除最后一位,例如:
x = 123; revertNum = 0;
设置一个中间值temp = x
第一次:revertNum = revertNum * 10 + temp % 10 => 3, temp= temp/ 10 => 12;
第二次:revertNum = revertNum * 10 + temp % 10 => 32, temp= temp/10 => 1;
第三次:revertNum = revertNum * 10 + temp % 10 => 321, temp = temp /10 => 0;
终止条件是 temp <= 0;
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 ==0 && x != 0)) {
return false;
}
int revertNum = 0;
int temp = x;
while (temp > 0) {
revertNum = revertNum * 10 + temp % 10;
temp /= 10;
}
return x == revertNum ;
}
}
为什么要用temo中间值呢?因为我们需要用最初的x值来和反转后的值进行比较,看是否相等;
2.其实一个回文数,我们只需要反转它的一半数就可以知道它是不是回文数了;
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 ==0 && x != 0)) {
return false;
}
int revertNum = 0;
while (x > revertNum) {
revertNum = revertNum * 10 + x % 10;
x /= 10;
}
return x == revertNum || x == revertNum/10;
}
}