力扣————第九题--回文数题解

解题思路

此处撰写解题思路
一开始想用数组去存储一次一次求余下来的数,再把数组转为字符串,发现这样数组不好定义有多大,因为数据很大。

bool isalindrome(int x){
    int revertedNumber=0;           //定义局部变量revertedNumber来保存每一次计算结果,但一开始要设置为零,有点像计数器qwq  
    if(x<0||(x%10==0&&x!=0)){          //数字的最后一位是0的话肯定不是回文数,因为数字首位不为零,然后要记住的就是!!!0是回文数!!
        return false;                 //直接放回false就好了
    }
    while(x>revertedNumber){          //每一次x/10就缩小10倍,revertedNumber就扩大10倍,如果是偶数回文数到中间位x==revertedNumber
                                    //那如果是奇数位呢?我们拿12321和1221举例,让1221和12321同时运算,奇数位revertedNumber到12的时候
                                    //x( 123 )>revertedNumber( 12 ),此时按偶数位来说该终止循环了,所以循环条件是让x>=revertedNumber吗
                                    //不对,这样x>=revertedNumber时,还会进入循环一次,在return判断的时候就不相等了,所以去掉 = ;
                                    //但是这样注意到奇数位也还会再进入一次循环,即出来时反倒revertedNumber比x多一位
                                    //所以奇数位就算是回文数你这样直接拿去都不与x相等,又发现如果是回文数奇数位的中间位不影响评判
                                    //所以用revertedNumber/10去除一位进行比较
            revertedNumber=revertedNumber*10+x%10;
                            //这边就是利用这种算法把他们再拼成一个数
            x/=10;
        }
    return x==revertedNumber||x==revertedNumber/10;
}

纯代码

 

作者:wwhaha
链接:https://leetcode-cn.com/problems/palindrome-number/solution/by-wwhaha-xpg5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nuyoah代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值