题目:
Determine whether an integer is a palindrome. Do this without extra space.
提示:
此题需要注意负数不是回文数。
另外,我一开始的思路是把输入数字通过整除和取模运算把它倒转过来与原数字进行比较(不用考虑倒转过来的数字会不会溢出,因为输入的数字是int型,如果这个数字倒转之后产生了溢出,那么和原数字比较一定不相等,由此可判断出不是回文数)。
后来在论坛中发现了一种更好的解决方案:即只倒转一半,如果输入数字的位数是偶数那就直接比较,如果位数是奇数那就将其中一个除以10再比较,这样做可以节省很多运算。
代码:
class Solution { public: bool isPalindrome(int x) { if (x == 0) return true; if (x < 0 || x % 10 == 0) return false; int rev = 0; while (x > rev) { rev = rev * 10 + x % 10; x /= 10; } return rev == x || rev / 10 == x; } };