利用stringBuilder的反转方法
public boolean isPalindrome(int x) {
String reversedStr = (new StringBuilder(x + "")).reverse().toString();
return (x + "").equals(reversedStr);
}
利用整数特性
public boolean isPalindrome(int x) {
// 如果小于0则不是回文数
if(x<0){
return false;
}
// 获取整数长度
int i=1;
while(x/i>=10){
i=i*10;
}
while(x>0){
// 取首位,因为i是最大值,所以每次都是首位
//比如121 i=100
//1234 i=1000
int left=x/i;
// 取末位
int right=x%10;
if(left != right){
return false;
}
// 因为上面一步已经判断,所以可以直接通过模余取尾数
// 模余:
int j=x%i
// 去掉末位数
x=j/10;
// 去掉首位去掉末位所以i需要重新定义长度
i/=100;
}
return true;
}
把数字进行对折对比
// 如果末尾为0一定为false,如果数字以0开头,则是一个以8为底的八进制数字。比如012是十进制的10
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x == revertedNumber / 10;
注意点:反转溢出
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
// 如果小于最大值除10,先判断反转值和整数最大值取余的值是否相同,再判断末位是否大于7,下面同理
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}