判断一个数是不是回文数,不能使用额外存空间。
如果是string的话,可以首尾进行判断,但因为是integer, 要获得某一个特定位上的数值是不容易的。
在这里,我们将原来的input,进行翻转(不熟悉可以看下reverse integer这道题的post)。
然后判断reverse的integer是否和原来的integer相等。
关于overflow问题:
如果如果一个数是回文数,那么它翻转后跟它原始的一样,一定不会overflow。
所以,如果在reverse的时候发生了overflow,那么它就一定不是回文数了。
代码:
public int reverse(int x) {
int result = 0;
boolean isNeg = x < 0;
x = Math.abs(x);
while (x > 0) {
if ((Integer.MAX_VALUE - x % 10) / 10 < result) {
return 0;
}
result = result * 10 + x % 10;
x /= 10;
}
return isNeg ? -result : result;
}
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
return reverse(x) - x == 0;
}