美文网首页
9. Palindrome Number

9. Palindrome Number

作者: liuzhifeng | 来源:发表于2017-10-14 10:30 被阅读0次

    题设

    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;
    

    相关文章

      网友评论

          本文标题:9. Palindrome Number

          本文链接:https://www.haomeiwen.com/subject/abdxuxtx.html