判断一个整数是否回文。

 

1.用字符串反转

public boolean isPalindrome(int x) {

if (x<0)
return false;
StringBuilder sb = new StringBuilder(String.valueOf(x)).reverse();
if (sb.toString().equals(String.valueOf(x)))
return true;

return false;
}

 

2. 不用字符串

整数反转,参加7.整数反转

public boolean isPalindrome(int x) {
if (x<0)
return false;

int rev = 0;
int xx = x;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE%10)) return false;

rev = rev * 10 + pop;
}
if (rev == xx)
return true;
else
return false;
}

 3.对2优化,不必将整个数反转,只需反转一半。既减少一半的运算,又避免越界的可能。

问题是:何时到达一半?

 

 由于整个过程我们不断将原始数字除以 ​​10​​​,然后给反转后的数字乘上 ​​10​​,所以,当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。

 需要考虑边界情况x<0 和 x的最后一位是0。//这两种情况会影响上述对“一半”的判断,

public boolean isPalindrome(int x) {
if (x<0 || (x%10 == 0 && x != 0)) {
return false;
}
int reverted = 0;
while (x>reverted) {
reverted = reverted*10 + x%10;
x/=10;
}
return (reverted == x) || (reverted/10 == x); //偶 || 奇
}