LeetCode || Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

判断一个int值是否为回文数。

本题有几点需要注意:

(1)不能用额外存储空间,也就是说只能用常数空间解决;诸如将int转换为string再去比较字符是不可行的;

(2)判断回文数的方法有两个:从中间开始向两头判断、从两头向中间判断;后者更简单一些,每次取出低位和高位数字进行比较,取低位直接模10就行,那如何取高位呢?取高位也用模的方法,只不过我们要首先知道X有多少位,如1001有四位,那么我们取高位的1时就模1000,我们设这个高位模为div,首先得计算出div才能开始判断回文,计算div的方法就是用x去除以10、100、1000.。。。直到得0,即:

div =10;

while(x / div != 0)    div *= 10;

然后最后div /= 10;就行了。

我一开始就是这么做的,但是不知道大家有没有发现,如果x是几十亿的数,while循环结束时得到的会是大一个数量级的上百亿的数(所以最后还要除以10),这样div就溢出了,所以这么求div是不对的;应该这么求:

div =1;

while( x / div >10)    div *= 10;

这样就不会溢出了,除非 x 溢出(这是不可能的);

(3)判断回文过程中可以取出收尾的数字,再比较,也可以直接比较,我用的直接比较;

代码如下:


class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)
            return false;
        int div=1;
        while(x/div >= 10)
            div*=10;
        while(x>0 && (x%10 == x/div)){
            x %= div;
            div /= 100;
            x /= 10;
        }
        if(x > 0)
            return false;
        return true;
    }
};

注意如果 x = 100001,那么经过一轮循环,x就变为1了,小于div 了,因为中间的0被取模消去了,此时也不影响判断过程,因为 x /div 依然等于0.


参考链接:http://leetcode.com/2012/01/palindrome-number.html








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值