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;
    }

Posted by richard爱闹 - 8月 1 2014
如需转载,请注明: 本文来自 Richard