美文网首页
LeetCode-回文数

LeetCode-回文数

作者: 沙漠小舟 | 来源:发表于2020-03-31 22:38 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode-回文数

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