题目要求:
判断一个数是否为回文数。需要注意的点:
①题目中已说明负数都不是回文数,且能整除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 查看本文章