一. 题目
- 题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 - 示例
二. 方法1: 转成字符串
-
解题思路
- 将数字转成字符串
- 两字符串两侧的字符依次进行比较, 若不相等则不是回文
- 如果运行到字符串中间都没提前退出, 则该字符串就是回文
-
解题代码
def isPalindrome(x: int) -> bool: str1 = str(x) size = len(str1) for i in range(size // 2): if str1[i] != str1[size - i - 1]: return False return True
-
分析
时间复杂度: O(n)
空间复杂度: O(n)
三. 方法二:数字翻转
-
解题思路
从最低位依次获取每一位的数字组合成一个新的数字
如果原数字和新数字相等, 则为回文数 -
解题代码
def isPalindrome(self, x: int) -> bool: temp = x num = 0 # 如果x为负数 或者其末尾为0, 但本身不为0, 则一定不是回文数 if x < 0 or (x % 10 == 0 and x != 0): return False while x > 0: num = num * 10 + x % 10 x //= 10 if temp == num: return True else: return False
-
分析
时间复杂度: O(logn)
空间复杂度: O(1)
不知道为什么运行时间和运行内存和方法一几乎没区别