Palindrome Number
第一眼想到的是用bit数组存每一位,然后就想判断回文串一样简单的遍历n/2就可以了。
bool isPalindrome(int x) {
if(x<0) return false;
int bit[32];
int i=0;
while(x>0)
{
bit[i++]=x%10;
x/=10;
}
for(int j=0;j<i/2;j++)
{
if(bit[j]!=bit[i-j-1])
return false;
}
return true;
}
但是题目要求空复O(1),虽然leetcode比较松让你通过,但是面试估计不行。于是想怎么同时取到首尾位边取边比较就可以了。
于是想到之前我不记得这种 bit=y%10m y/=10; 从低位到高位求bit的方法的时候,从高位到低位求bit的方法了,但是那个先从
31开始,因为不知道有多少位,现在想想可以先用低到高求出位数,然后再来一个while循环,低位->高位 高位到低位同时求,没求
一位就判断,整个框架还是判断回文串,但是优势是不需要存储整个int的bitset。
bool isPalindrome(int x)
{
if(x<0) return false;
int y=x,count=0,bitlow,bithigh;
while(y>0)
y/=10,count++;
int z=x;y=x;
int i=0;
while(i<count/2)
{
bitlow=y%10;
y/=10;
bithigh=z/pow(10.0,count-1);
z-=bithigh*pow(10.0,count-1);
count--;
if(bitlow!=bithigh) return false;
i++;
}
return true;
}