9. Palindrome Number

2017-10-14  本文已影响0人  liuzhifeng

题设

Determine whether an integer is a palindrome. Do this without extra space.

要点

要判断是不是回文数字,一个思路是把int转为string处理。但是题目限制了空间,所以不可行;
还有一种思路是找出这个数字的反转数,判断是否相等。但是之前的题目得知int反转可能会溢出;
解题思路是把数字的最后一半反转。
例如:
对于1221,通过反转后面两位,发现12==12,所以是回文数字;而1231,13!=12,就不是回文数字;
对于12321,反转后面3位,有123=123,也是回文数字。
在寻找反转数的过程中,一旦发现本次循环得到的反转数和此时的x值相等,就返回true。
注意0-9都是反转数,负数不是反转数;10、20这种≥10且%10==0的肯定也不是回文数。

    public static boolean isPalindrom(int x){
        if(x >= 0 && x < 10)
            return true;
        if(x < 0 || x % 10 == 0) // 注意最后一位为0的情况,肯定不是回文数,但是会对后面产生影响
            return false;

        int value = x;
        int result = 0;
        while(value >= 10){
            int tail = value % 10;
            result = result * 10 + tail;
            if(result == value) // 1221这种偶数位情况
                return true;
            value /= 10;
            if(result == value) // 12321这种奇数位情况
                return true;
        }
        return false;
上一篇下一篇

猜你喜欢

热点阅读