题目:
Determine whether an integer is a palindrome. Do this without extra space.
思路:
1.本题目比较简单,所谓回文数,则表示该数可按照中心位置进行“折叠”;
2.本题目解决方案为依次取当前数据的最高位(L)与最低位(R),并比较之,取最低位比较简单,R=x/10,在取最高位之前,需要计算出一个值idx(如1000),使得10>x/idx>0,于是L=x/idx;
3.比较L,R,若L!=R,则程序可以退出,否则,去掉x的L与R,构造新的x,比较新的L与R,去掉x的最高位:x=x-(x/idx)*idx,去掉最低位,x=x/10,新的x构造好后,由于x的位数少了两位,于是idx=idx/100;
4.程序执行到最后,或者中途退出,返回false,或者x=0,返回true。
代码:
class Solution{
public:
bool isPalindrome(int x){
if(x<0)
return false;
if(x<10)
return true;
int idx=1;
while((x/idx)>=10)
idx*=10;
while(x)
{
int l=x/idx;
int r=x%10;
if(l!=r)
return false;
else
{
x=(x-(x/idx)*idx)/10;
idx/=100;
}
}
return true;
}
};