【每日一题】——力扣-回文数-反转数字后半段解法

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true
示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

解析:

先理解回文数的定义,由定义可知,回文数无论是从左向右阅读还是从右向左阅读,所得到的数字都是相同的,在做这道题目的时候,我们可以思考,既然左右两边所表示的数字是反向相同的,即可以看后一半的数字与前一半的数字判断是否相同,如果前后相同则是回文数。因此我们开始准备此题目的基本思路。

再看题目,给我们的是一个布尔函数,意味着在布尔函数内部判断falsetrue,这里就要先进行一个判断,那么判断的条件是什么?

我们知道回文数中给我们举的三个例子,可知:

1.回文数中输入负数一定是错误的,即x<0一定false

2.如果输入的数存在120、110之类尾数带0的数字,可以被0整除的数字也一定不是回文数

3.如果输入的数字是奇数的个数,例如12321,那么要对12321进行分析,

对12321/10=1232,1232/10=123,123/10=12,(这就是我的x 前一半)

则12321%10=1,1232%10=2,123%10=3(这就是我的car)

有这样拆解分析可得

如果12321的第一个余数*10+1232%10的2可得到镜像12(car的解释)

之后12*10+123%10的3可得镜像123

因为12321奇数位的回文数是成立的

故123/10=12,最后与原来一半的12相同,所以return x==car

以下为详细完整代码

bool isPalindrome(int x){
    if((x!=0&&x%10==0)||x<0){
        return false;
    }
    int car=0;
    while(x>car){
        car=car*10+x%10;
        x/=10;
    }
    return x==car||x==car/10;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值