美文网首页
LeetCode 09 Palindrome Number

LeetCode 09 Palindrome Number

作者: SiyueLin | 来源:发表于2016-04-16 21:44 被阅读76次

    题目要求

      Determine whether an integer is a palindrome. Do this without extra space.
      题目翻译:判断一个Integer是否是回文数字。程序不开辟额外的空间。

    题目分析

      最开始的思路是把比较数字的第一位和最后一位,并截断第一位和最后一位。比如:数字是12321,比较首尾,然后截断,得到232,依次比较。然而出现了一个问题:当输入带有0时,比如1000021时,截断会发生遗漏,比如截断1000021首尾,我们期望得到00002,结果得到的是2,因此出现错误的结果。
      调整的思路是取出首尾位,不截断。假设输入123321,比较2的时候,高位的2是这样得来的:(123321/10000)%10 ;低位的2是这样得来的:(123321%100)/10
    泛化的情况如下:
      len = 数字位数-1; // 比如12321,len=4
      first = (x / (int)Math.pow(10, i)) % 10;
      last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));

    实现代码

    package com.linsiyue;
    
    public class Solution {
        public boolean isPalindrome(int x) {
            if (x<0) return false;
            if (x<10) return true;
            long n = 1;
            int first = -1, last = -1, len = 0;
            while (x >= n){
                n = n*10;
                len++;
            }
            len--;
            for (int i = len; i > len/2; i--) {
                first = (x / (int)Math.pow(10, i)) % 10;
                last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));
                if (first != last) return false;
            }
            return true;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 09 Palindrome Number

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