9. 回文数

Ideas

算法:迭代

数据结构:一个变量就OK

思路:


  1. 首先负数肯定都不是回文数,所以遇到负数可以直接return false;
  2. 针对最后一位是0的情况,因为0不能作为开头,所以只要最后一位数字是0并且这个数字本身不是0,也可以直接return false;
  3. 突然间想到之前做的LeetCode Algorithm 7. 整数反转,根据回文数的定义,把一个整数反转之后那么它应该还等于它本身;
  4. 直接翻转的话有可能会导致int类型整数溢出,所以需要优化一下:因为回文数是对称的,所以从中间位置往后的翻转操作都是多余的,只需要后一半数就可以了;
  5. 针对奇数个位数的回文数,可以直接把翻转后的数字的最后一位去掉。

Code

C++

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