1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Palindrome Number

Posted on 2013-10-11 11:22  1957  阅读(175)  评论(0编辑  收藏  举报

判断一个数字是否位回文,不能使用额外的空间。

最简单的就是转成字符串,然后来判断。

但是这题限制了不能用。

可以考虑就是把数字反转,然后看是否相等,但是又有个问题就是,反转了可能溢出。。。

我们每次取数字的头和尾的数字来比较!

设数字为x

末位= x % 10

首位=x / div

这个div是我们算出来的

int div = 1;

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

这样就能保证能取到首位的数字了。

比较之后再去掉首位的数字,继续!

(x%div)/10

那么,div就要除100,因为少了两位

div /= 100

 

class Solution {
public:
    bool isPalindrome(int x) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(x < 0) return false;
        
        int div = 1;
        while(x / div >= 10) div *= 10;
        
        while(x){
            int l = x / div;
            int r = x % 10;
            if(l != r) return false;
            x = (x % div ) / 10;
            div /= 100;
        }
        return true;
    }
};