Determine whether an integer is a palindrome. Do this without extra space.
分析:
1. 如果将数字转化为字符串,再判断是否为回文字符串,要使用额外空间,不满足要求。
2. 考虑将数字翻转,LeetCode 7. Reverse Integer,然后与原来的整数比较,是否相等,相等则为回文数字。可是翻转数字可能会导致溢出。
3. 正确的解法为,不断地取第一位和最后一位(10进制下)进行比较,相等则取第二位和倒数第二位,直到完成比较或者中途找到了不一致的位。
class Solution {
public:
bool isPalindrome(int x)
{
if (x < 0) return false;
int d = 1;
while (x / d >= 10) d *= 10; // 10进制量级,个十百千万
while (x) {
int q = x / d; // 首位数字
int r = x % 10; // 末位数字
if (q != r) return false;
x = x % d / 10; // 取消首尾数字
d = d / 100; // 10进制量级
}
return true;
}
};