方法一:每次取头尾两位比较
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
int high = 1;//最高位数,121 high = 100
int y = x;
while (y >= 10) {//必须这么写,如果写y >= 0,high会比y多一位,有越界风险。
high *= 10;//计算所以用来获取最高位的除数
y /= 10;
}
while (x != 0) {
//取头尾两个数比较
if (x / high != x % 10) {
return false;
}
x = (x % high) / 10; //把x去掉头尾
high /= 100;//去掉了两位,所以用来获取最高位的除数要少两位
}
return true;
}
}
方法二:反转整数,再比较
如果是回文数,显然不会溢出. why?
public boolean isPalindrome(int x) {
int rev = 0;
int y = x;
if(x < 0){
return false;
}
while(y != 0){
int res = y % 10;
rev = rev * 10 + res;
y = y / 10;
}
return rev == x;
}