题目描述:
首先负数一定不是回文数,0是回文数,10的倍数一定不是回文数10000
方法1 ,跟前面的求数的逆序一样,求出逆序数,与原数比较即可,需要借助temp:
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0)
return false;
int res = 0;
int temp = x;
while(temp != 0){
res = res * 10 + temp % 10;
temp /= 10;
}
return res == x ? true:false;
}
};
方法2,逆序一半进行比较:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0 || (x != 0 && x% 10 ==0))
return false;
int res = 0;
while(x > res){
res = res * 10 + x % 10;
x /= 10;
}/*ex.121,res=1,x=12,res=12,x=1,退出循环,x==res/10,或1221,x==res,也是回文数*/
return (res /10 == x)||(res == x);
}
};
这个方法事先做了一定的剔除,逆序一半进行比较,当x < res 时退出循环,如果这时的 x 与res 相等,或者两者只有一位的差距,即res /10 = x,那么就是回文数,注意 while 循环的判断条件 x > res ,不能有 x > = res, 否则会出现错误,因为考虑 0 时显然res = x , 会构成死循环。
这两个算法都不太好,用时180ms.