9. 回文数
Ideas算法:迭代 数据结构:一个变量就OK 思路:
- 首先负数肯定都不是回文数,所以遇到负数可以直接return false;
- 针对最后一位是0的情况,因为0不能作为开头,所以只要最后一位数字是0并且这个数字本身不是0,也可以直接return false;
- 突然间想到之前做的LeetCode Algorithm 7. 整数反转,根据回文数的定义,把一个整数反转之后那么它应该还等于它本身;
- 直接翻转的话有可能会导致int类型整数溢出,所以需要优化一下:因为回文数是对称的,所以从中间位置往后的翻转操作都是多余的,只需要后一半数就可以了;
- 针对奇数个位数的回文数,可以直接把翻转后的数字的最后一位去掉。
class Solution { public: bool isPalindrome(int x) { if (x < 0 || (!(x % 10) && x)) return false; int rev = 0; while (rev < x) { rev = rev * 10 + x % 10; x /= 10; } return rev == x || rev / 10 == x; } };Python
class Solution: def isPalindrome(self, x): if x<0: return False if x<10: return True if x % 10 == 0: return False x_str = str(x) if x_str[::-1] == x_str: return True return False