判断一个整数是否回文。
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); //偶 || 奇 }