首先,我们要清楚什么是回文数;
例如 12321 反转后等于原来数字的数叫回文数。
算法方面:
我们应该先处理临界情况。
(1).所有的负数不是回文数 x<0
(2).大于0能被10整数的都不是回文数。x != 0 && x % 10 ==0
现在,我们开始考虑如何反转后半部分的数字。
对于数字 1221,如果执行 1221 % 10 (1221对10进行取余)我们将会得到最后一位数字1 ,要得到倒数第二位数字,我们再对122进行取余得到2。如果我们再把最后一个数字乘10,再加上倒数第二位的数字,1*10+2=12,就得到了我们想要反转的数字。如果继续这个过程,我们将会得到更多位数的反转数字。
那么,我们应该如何知道反转数字的位数已经达到原始数字位数的一半?
由于整个过程我们不断将原始数字除以10,然后给翻转数字乘上10,所以,当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。
然而数字的长度有可能是奇数也有可能是偶数我们可以通过去除中间的数字(长度为奇数反转之后中间的数字不影响最回文)。
int numLength=0;
x == numLength / 10
最后上java代码
class Solution {
public boolean isPalindrome(int x) {
if(x<0 || (x %10 ==0 && x !=0)){
return false;
}
int numLength = 0;
while(x >numLength ){
numLength = numLength *10 +x % 10;
x /=10;
}
return x== numLength || x == numLength /10;
}
}