题意
判断一个数是否是回文数,要求 O(1) 空间。
思路
如果 O(1) 空间的话,那么可以考虑逆转这个数字,但是会导致溢出。
比如要判断123494321是否是回文串,我们只需要比较前一半和后一半,即1234和4321,所以只需要逆转数字的后一半即可。
代码
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int l = 0, t = x;
while (t) {
t /= 10;
l++;
}
int halfL = l / 2;
int backHalf = 0;
for (int i = 0; i < halfL; i++) {
int tx = x % 10;
x /= 10;
backHalf *= 10;
backHalf += tx;
}
if (l & 1) x /= 10;
return x == backHalf;
}
};