LeetCode-回文数

2020-03-31  本文已影响0人  沙漠小舟

题目链接 => 戳这里

题目截图

解析

我们从题目中就可以知道如果输入的整数是负数,那么这个数就一定不是回文数,那么还有没有其他特例情况呢?我们考虑一下结尾是0的数,如果这个数不是0,而是10,20这种,那么也一定不是回文数。那么正常情况下如何判断一个整数是否为回文数呢?
1.反转整个整数,通过 x % 10的方式,我们每次可以拿到x最后一位的数,然后通过x = x / 10的方式去除最后一位,例如:

x = 123; revertNum = 0;
设置一个中间值temp = x
第一次:revertNum = revertNum * 10 + temp % 10 => 3, temp= temp/ 10 => 12;
第二次:revertNum = revertNum * 10 + temp % 10 => 32, temp= temp/10 => 1;
第三次:revertNum = revertNum * 10 + temp % 10 => 321, temp = temp /10 => 0;
终止条件是 temp <= 0;

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x % 10 ==0 && x != 0)) {
            return false;
        }
        int revertNum = 0;
        int  temp = x;
        while (temp > 0) {
            revertNum = revertNum * 10 + temp % 10;
            temp /= 10;
        }
        return x == revertNum ;
    }
}

为什么要用temo中间值呢?因为我们需要用最初的x值来和反转后的值进行比较,看是否相等;
2.其实一个回文数,我们只需要反转它的一半数就可以知道它是不是回文数了;

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x % 10 ==0 && x != 0)) {
            return false;
        }
        int revertNum = 0;
        while (x > revertNum) {
            revertNum = revertNum * 10 + x % 10;
            x /= 10;
        }
        return x == revertNum || x == revertNum/10;
    }
}
上一篇下一篇

猜你喜欢

热点阅读