9. Palindrome Number

这个其实挺难的,第二次做还是不太会。

题目说的without extra space其实是想表达constant space..

主要就是不让转化为Sring或者重新allocate another array..

正常做的话反着一位一位组成一个新的值,和原来的比较。。

Time: O(lgN)
Space: O(1)

public class Solution {
    public boolean isPalindrome(int x) {
        int X = x;
        int temp = 0;
        
        while (X > 0) {
            temp = temp * 10 + X%10;
            X /= 10;
        }
        return temp == x;
    }
}

然后reverse过程中是会overflow的,X满足palindrome,肯定不会overflow;否则有可能overflow,但是溢出后返还的数基本不会和想要的相等,所以其实也没啥问题……

另一个没毛病的做法是从两边比较。 先算出有多少位,然后左右 左右检查是不是一样。。

time: O(lgX)
space: O(1)

public class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) return false;
        int digits = (int)(Math.log(x) / Math.log(10));
        int l = 0;
        int r = 0;
        while (x > 0) {
            int pow = (int)Math.pow(10, digits);
            l = x / pow;
            r = x % 10;
            if (l != r) return false;
            digits -= 2;
            x -= l * pow;
            x /= 10;
        }
        return true;
    }
}
posted @ 2016-11-05 06:29  哇呀呀..生气啦~  阅读(84)  评论(0)    收藏  举报