判断回文数

空间复杂度为O(1)的条件下,如何判断一个数是否回文。

【方法1】最好的方法如下,可以避免溢出的风险

public class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x % 10 == 0)) {
            return false;
        }
        int reverse = 0;
        while (x > reverse) {
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        return x == reverse || x == (reverse / 10);
    }
}

上面这种方法的关键思想是把n位的数字,分成位数相差之多为1的两部分(循环结束的条件很重要,可以保证两个数位数相差至多为1),然后比较,如果x是回文数,并且位数为偶数,那么x一定等于reverse,如果x是回文数,并且位数为奇数,那么x一定等于reverse / 10。

【方法2】下面这种方法,存在溢出的问题

public class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        int reverse = 0, tmp = x;
        while (x != 0) {
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        return reverse == tmp;
    }
}

 【方法3】改进后的方法2如下,可以避免溢出的风险

public class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        int tmp = x, reverse = 0;
        while (tmp >= 10) {
            reverse = reverse * 10 + tmp % 10;
            tmp /= 10;
        }
        return reverse == x / 10 && tmp == x % 10;
    }
}

方法3,避免了最后一次操作,从而消除了溢出的风险。

posted @ 2015-04-12 23:54  Truezion  阅读(261)  评论(0编辑  收藏  举报