【LeetCode-简单】9. 回文数

9. 回文数


解法:
我的解法是先判断 x 是否为负数,如果为负数,x肯定不是回文数,此外,如果0 < x < 10,x一定是回文数,其他情况将 x 翻转过来与原 x 进行比较,相等则为回文数。要注意反转后的数可能超过 int 的范围

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        if(x < 10) return true;
        int temp = x;
        long long reverse = 0;
        while(temp > 0){
            reverse = reverse * 10 + temp % 10;
            temp /= 10;
        }
        if(x == reverse) return true;
        else return false;
    }
};

题解:反转一半数字

题解的思路就更优秀了,以1221为例,如果翻转后两位后与前两位相同,则为回文数,21翻转后为12,与12相同,可见1221为回文数。

在临界值的判断上,最后一位为0的数也不可能是回文数。

那么如何知道反转数字的位数已经达到原始数字位数的一半?
答:由于整个过程我们不断将原始数字 x 除以 10,然后给反转后的数字reverse 乘 10,所以,当原始数字 x 小于或等于反转后的数字 reverse 时,就意味着已经处理了一半位数的数字了。

当位数为奇数位时,如12321,经过运算后原 x =12,reverse = 123,此时则将 x 与 reverse/10 进行比较即可。

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        if(x < 10) return true;
        if(x % 10 == 0) return false;
        int reverse = 0;
        while(x > reverse){
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        if(x == reverse || x == reverse/10) return true;
        else return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值