LeetCode-回文数

题目链接 => 戳这里

题目截图

解析

我们从题目中就可以知道如果输入的整数是负数,那么这个数就一定不是回文数,那么还有没有其他特例情况呢?我们考虑一下结尾是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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容