题目:
Determine whether an integer is a palindrome. Do this without extra space.
思路:
题目不难,但仍然有三点需要特别注意:
1)如果是负数怎么办?假定如果是负数就返回false。
2)如果你想首先把整数转化为字符串,然后比较字符串是否是回文,那么需要考虑到此时的空间复杂度会变为O(n),其中n是输入整数的位数。
3)如果你想直接对整数进行翻转,那么空间复杂度为O(1),但是必须要考虑到溢出的情况。
该算法的时间复杂度为O(n),其中n是输入整数x的位数。
代码:
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int y = 0, z = x;
while (z > 0)
{
int last_num = z % 10;
if (y > (INT_MAX - last_num) / 10)
return false;
y = 10 * y + last_num;
z /= 10;
}
return x == y;
}
};