题目
解题思路
题目要求只能用O(1)的空间,所以首先排除把它转化为字符串然后reverse比较的方法。
我开始想的是将原整数倒置,和原来整数比较大小,相同则为true,不相同则为false,没想到又引出了数字溢出的问题。
以上两种方法既然不可取,那么只能选择分离数字的方法,当然要用到大量除10和取余数的计算。
代码
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0)
return false;
if(x < 10)
return true;
int digits = 0;
int t = x;
int d = 0;
while(t!=0){
t = t / 10;
++d;
}
int right = pow(10, d-1);
int left = 1;
while(right >= left){
if(x / left % 10 != x / right % 10)
return false;
left *= 10;
right /= 10;
}
return true;
}
};
注意事项
突然发现自己一直弄错了true和TRUE的关系,这里做一个记录:
这两者在C++里是有区别的
true是bool型的;
TRUE是int型的,VC里这个是ms自己定义的;
C++规定不允许只通过返回类型不同区别两个函数