题目描述
判断一个int是否为回文数,回文数定义为首位置和末尾一样,如1234321,123321。
题目分析
- 刚开始想的是把数字翻转过来,然后跟原来的数字进行比较,但是要防止翻转后的数字会出现整型溢出的问题。
- 所以不可以翻转全部,如果一个数是回文数,那么可以翻转他的后半部分跟前半部分进行比较。
- 当然首先要考虑临界状态,负数带有符号,所以肯定不会是回文数。
- 0肯定是个回文数,并且,当x最后一位是0的时候,第一位也肯定得是0,因此只有0符合此要求。
- 如果x是奇数,循环结束后最中间那位会在翻转数的最后一位,因此直接除以10就可以。
题目解答
class Solution {
public boolean isPalindrome(int x) {
//特殊情况:x小于0时肯定不是回文数
//当最后一位为0时,第一位也必须是0,满足要求的只有0
if(x<0 || (x%10==0&&x!=0)) return false;
int num=0;//保存翻转数
while(x>num){
num=num*10+x%10;
x/=10;
}
//如果x是奇数的话,除去最中间那一位,num直接除以10就可以
return x==num||x==num/10;
}
}