原题地址:https://leetcode.com/problems/palindrome-number/
题目要求是:给定一个整数,判断是否是回文数。所谓回文就是正过来读和倒过来读都一样,例如12321是回文数,1221也是回文数。
另外,这个题目还有个很奇怪的要求:不能使用额外空间。个人理解这里的“额外空间”应该是指不能把整数转成成字符串,而不是说一个变量都不许用。。。(如果转成字符串再用reverse()方法一两行代码就搞定了)
一个思路是反转这个整数,然后判断和原来的数是否相等。需要处理溢出的情况,所以使用了long型保存反转结果:
public class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
long reverse = 0;
int t = x;
while (t != 0) {
reverse = reverse * 10 + t % 10;
t /= 10;
}
return (reverse == (long)x);
}
}
当然,上面的算法是可以优化减小计算量的。考虑到回文数的对称特性,可以只反转一半,然后和另外一半进行比较。这样计算量减小了一倍,也不用考虑溢出问题。
举两个例子:
如果位数为偶数,如1221,从右往左反转一半得到12,与左边一半相同,返回true<