9. Palindrome Number

文章目录如下

(1)自己的思路

(2)自己的代码

(3)别人的思路

(4)别人的代码

(5)对比自己的不足之处

 

(1)自己的思路

又碰见回文数了,不过这次要简单很多,因为这次仅仅是判断一个数字x是不是回文数,那么只需要将一个整数进行调转即可,然后保存为一个新的数字r,最后比较x与r是否相等。期间牵扯到的取余,除法运算想必看过代码之后就会理解,不多说,直接贴代码

(2)自己的代码

class Solution {
public:
    bool isPalindrome(int x) {
        
        int tmpx = x;
        int tmp = 0;
        
        while(tmpx!=0)
        {
            tmp = tmp*10 + (tmpx%10);
            tmpx = tmpx/10;
        }
        
        return (tmp==x);
    }
};

(3)别人的思路

每次比较整数x的最高位与最低位,然后将x进行拆解,去掉x原有的最高位与最低位,然后继续进行比较,如果有一次不满足情况,那么便判断不是回文数,否则直到比较结束后,返回该数字是回文数。

(4)别人的代码

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;
        int d = 1; // divisor
        while (x / d >= 10) d *= 10;

        while (x > 0) {
            int q = x / d;  // quotient
            int r = x % 10;   // remainder
            if (q != r) return false;
            x = x % d / 10;
            d /= 100;
        }
        return true;
    }
};

(5)对比自己的不足之处

我是根据原数x构造了另外一个数字r,其中r的顺序与x的顺序相反。别人的思路只在x上操作,一次比较数的开始与末尾的数字是否相等。

其中我这种方法有一个致命的缺点,就是当整数特别大的时候(超出了int范围),在构造r的过程中很容易出错,但是别人的方法却没有这种问题,所以再遇到这种问题,尽量在同一个数上进行操作,以此来避免数值范围的问题!

 

posted @ 2016-04-01 12:34  MAGICY  阅读(128)  评论(0编辑  收藏  举报