美文网首页
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