题解 | #回文数字#

回文数字

http://www.nowcoder.com/practice/35b8166c135448c5a5ba2cff8d430c32

这道题一上来我想的是用一个数组存数字的各位数,然后用两个指针分别从数组两端遍历数组并比较,但是题目要求不能使用额外的内存空间,于是我考虑重复对数据进行操作,每次取最高位和最低位,然后比较,只要不相等就返回false.
取最低位比较简单,直接原数取余即可;主要是取最高位,采用while循环,循环进行的条件就是原数除10之后的商不是1位数,所以直到该商是一位数的时候就得到了最高位。
得到最低位和最高位之后,在原数的基础上减去两位,就相当于之前数组思想中的指针移位。
代码如下:

class Solution {
public:
    /**
     * 
     * @param x int整型 
     * @return bool布尔型
     */
    bool isPalindrome(int x) {
        // write code here
        if(x<0)
        {
            return false;
        }
        int y1 = abs(x);
        int y2 = abs(x);
        int i = 0;
        int zheng = 0;
        int fan   = 0;
        while(y1>9)
        {
            i = 1;
            while((y1/=10)>9)
            {
                i = i*10;
            }
            zheng = y1;//正着取最高位
            fan   = y2%10;//倒着取个位
            //把比较过的两个数减去
            y2=y2/10;//去掉个位
            y1=y2-zheng*i;//去掉最高位
            y2=y1;
            if(zheng == fan)
            {
                continue;
            }
            else{
                return false;
            }
        }
        return true;
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务