【LeetCode系列】Day3 回文数 Palindrome Number

题目要求:

判断一个数是否为回文数。需要注意的点:

①题目中已说明负数都不是回文数,且能整除10的都不是回文数

②最好别把 int 类型转化为 string 类型,因为需要更大的存储空间


思路:

该系列的上一篇反转整数中已经实现将整数反转,只需要比较输入数据和反转后的数据是否相等即可。但可以优化为将整数反转一半后进行比较。


解决方案:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0 || (x != 0 && x % 10 == 0)){
            return false;
        }
        int reverse = 0;
        while(x > reverse){       //判断是否已反转一半
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        return x == reverse || x == (reverse / 10);
    }
};

在此解释一下为什么还需要比较 x == (reverse / 10),这是针对当输入数据 x 的位数是奇数时的处理。例如:x = 12321,第一次结果:reverse = 1, x = 1232,;第二次结果:reverse = 12, x = 123;第三次结果:reverse = 123, x = 12。此时不满足 x < reverse,也不满足 x == reverse,满足 x == (reverse / 10) 均为12。当输入值 x 的位数是偶数时,如 x = 1221,执行到reverse = 12, x = 12时即可判断。

扫描二维码关注公众号,回复: 957905 查看本文章

猜你喜欢

转载自blog.csdn.net/u014586129/article/details/80354513