美文网首页
LeetCode #9 Palindrome Number

LeetCode #9 Palindrome Number

作者: 光煜Gray | 来源:发表于2018-10-03 00:13 被阅读0次

思路1 字符串

要是能把Int转化成String,然后从头尾开始对比,就能知道这个整数是不是一个Palindrome Number了

代码1

class Solution {
    public boolean isPalindrome(int x) {
        String s = Integer.toString(x);
        // i只需要取到总长度的一半,因为我们是从头尾同时往中间对比的
        for (int i = 0; i < s.length() / 2; i++) {
            int oppo = s.length() - 1 - i;
            if (s.charAt(i) != s.charAt(oppo)) return false;
        }
        return true;
    }
}

思路2 Reverse Integer

LeetCode #7: Reverse Integer中已经有办法如果去反转一个数字了。所以其实我们沿用同样的思路。如果一个数字是Palindrome,那么它反转过后,应该还是本身。(根据题意,负数除外)

复杂度分析

Time complexity: O(n), Space: O(n)

代码2

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0) return false;
        if (x == 0) return true;
        int reversedInt = reverseInt(x);
        return x == reversedInt;
    }
    
    private int reverseInt(int x) {
        int sign = (x < 0) ? -1 : 1;
        x = Math.abs(x);
        int result = 0;
        while (x > 0) {
            int remainder = x % 10;
            x /= 10;
            if (result > (Integer.MAX_VALUE / 10) || (result == (Integer.MAX_VALUE / 10) && remainder > 7)) return 0;
            if (result < (Integer.MIN_VALUE / 10) || (result == (Integer.MIN_VALUE / 10) && remainder > 8)) return 0;
            result = result * 10 + remainder;
            
        }
        result *= sign;
        return result;
    }
}

思路2优化

上面的方法因为需要判断在反转的过程中是否发生了Overflow, 代码看起来没那么优雅。一个优化的方法是只对比一半就可以了。
例如1221,我们只需要对比1221就可以了。

代码

class Solution {
    public boolean isPalindrome(int x) {
        if (x == 0) return true;
        if(x < 0 || x % 10 == 0) return false;
        int result = 0;
        // 只对比一半
        while (x > result) {
            int remainder = x % 10;
            x /= 10;
            result = result * 10 + remainder;
            
        }
        return x == result || x == result / 10;
    }
}

相关文章

网友评论

      本文标题:LeetCode #9 Palindrome Number

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