【LeetCode力扣题库】9. 回文数(简单)

原题目链接:9. 回文数

题目描述:

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

示例 1:

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题思路

  1. 首先我们看完题目,感觉回文数啥的文绉绉的,说白了就是反转后半部分数字,反转完的后半部分数字和原本的前半部分数字相同就是回文数,也就是说这其实是一道用反转整数的思路来解决的题目
    1.1 以个数是偶数为例,至于个数是奇数的,我代码会详细注释讲解
    1.2 例如123321,前半部分就是123,后半部分就是321,反转完后半部分后是123,与前半部分比较,发现相等,就是回文数
  2. 至于如何进行整数反转,点击这里的,我有篇文章有详细讲解
  3. 剩下最后一个问题,我们如何判断前半部分已经反转完了呢?
    3.1 当反转完的数字大于或者等于未反转的数字,说明后半部分已经反转完成
    3.2 例如12321,反转后两个后,反转数是12,剩下未反转的是123,接着反转第三个后,反转数是123,剩下未反转的是12,此时反转后的数字大于未反转的数字,说明已经后半部分已经反转完成

我们以输入12321进行自制动画演示

点击这里在B站看动画演示喔,喜欢的看官可以一键三连,感谢支持

废话不多说,直接上代码,为了让各位看官更能清晰理解,我的代码写得不精简,我的代码里加了大量的注释,相信各位看官可以理解,如果我有些没写清楚或者写错的,可以评论区或者私信我喔

public boolean isPalindrome(int x) {
        //如果是负数,则不是回文数,因为没有末尾数字是负数的回文数
        if(x < 0) return false;
        //如果最后一个数是0,但是x不为0,则不是回文数,因为前面是0的话可省略
        //例如010或者0110,实际上也就是10或者110,所以不是回文数
        if(x != 0 && (x % 10 == 0)) return false;
        //设置一个变量保存反转后的数
        int fanZhuang = 0;
        //我们反转后半部分
        while( x > fanZhuang){  //这里循环条件,看我的上面的动画分析
            //反转的数,从x的个位数开始反转
            fanZhuang = (fanZhuang * 10) + (x % 10);
            //反转了一个数字,就去掉x对应的数字
            x = x / 10;
        }
        //当代码执行到这里,已经反转完后半部分,只要对比x的前半部分和反转后的后半部分是否相等就行了

        //fanZhuang / 10这个操作是为了应对x是奇数的情况
        //例如x=12421,当代码执行到这里,x = 12,fanZhuang = 124
        //由于4是中位数,也就是说可要可不要,这里除以10
        //就是把4给去掉,此时返回true,说明结果没错,还是回文数
        return x == fanZhuang || x == fanZhuang / 10;
    }   

喜欢的各位看官可以点赞+关注+收藏喔,感谢支持~

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值