问题
Determine whether an integer is a palindrome. Do this without extra space.
Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?
There is a more generic way of solving this problem.
分析
所有的负数都不是回文数,比如-123,“-”和3肯定不是对称的。
0-9是回文数。
2.其次,分析一下这个问题所给的提示:
对于负数问题,已经在第1条中说明了。
虽然可以很直接的想到转换为String类来判断某些位是否对称,但是,这样将占用额外的空间,显然是不满足上面hints的第二条的。
如果只是将原始的数字翻转后和原始数字对比,会出现翻转后的数字超出int的表示范围的问题。
所以,在这里,我们会选择一个折中的办法,只将原始数字的一半进行翻转。
代码
class Solution {
public boolean isPalindrome(int x) {
int fhalf = x;
int lhalf = 0;
if(x < 0 || (x%10 == 0 && x!=0))
{
return false;
}
while(fhalf > lhalf)
{
lhalf = fhalf%10 + lhalf * 10;
fhalf = fhalf/10;
}
return lhalf == fhalf || fhalf == lhalf/10;
}
}