此题一看就比较简单。先转字符串然后同时遍历即可。但是这样需要O(N)的空间。
能否压缩到O(1)呢,肯定是可以的,咱们从后往前存数,当存的数大于前面的数时,就可以判断了。要么相等,要么除以10后相等。
注意:要排出一些情况,如0结尾的,否则会出bug。
class Solution {
public:
bool isPalindrome(int x) {
if(x == 0)return true;
if(x < 0 || x%10 == 0)return false;
int rev = 0;
while(rev < x)
{
rev = rev*10 + x%10;
x /= 10;
}
return x == rev || x == rev/10;
}
};