Code
- Reverse给的启示,又想到了之前看到过 y == x || y == x/10
- 回翻了当时的答案,各种特殊情况都不满足,补充。
- (还写了一个map版的,更慢)
- 不必要的判断耗费时间?
public boolean isPalindrome(int x) {
int y = 0;
// 1.个位数是回文
if(x>=0 && x<10) return true;
// 2.负数不是回文
while(x>0){
y = y*10 + x%10;
// 3.以零结尾不是回文
if(y == 0) return false;
x/=10;
// 4.剩一位还不相等,不是回文
if(x<10 && y!=x){
return false;
}
// 5.前后相等,或前后差中间一位相等,是回文
if(y == x || y == x/10){
return true;
}
}
return false;
}
(OoO)
public boolean isPalindrome(int x) {
int y = 0;
if(x<0 || (x%10 == 0 && x!=0)) return false;
// 当x不大于y了,如果回文,则满足x == y || x == y/10(y超过了x)
while(x>y){
y = y*10 + x%10;
x/=10;
}
return x == y || x == y/10;
}