回文数
难度:简单
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解法一:字符串颠倒
class Solution:
def isPalindrome(self, x: int) -> bool:
return str(x) == str(x)[::-1]
直接将x
转化为字符串,将其颠倒后与原字符串比对,==
表达式会直接返回bool
类型的值,直接return
即可,较为简单。
解法二:整数取反
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
res, temp = 0, x
while temp:
res = res * 10 + temp % 10
temp //= 10
return res == x
与力扣LeetCode:Python3代码解析 — 7.整数反转中解法二:按位取模解法相似,设立中间变量res
用以保存每次取模后的结果,while
循环结束条件为temp=0
,每次获取temp
最右边一位,并将减少temp
的最右边一位。
以121为例:首先判断x
的正负,负数返回False
,正数将进入while
循环:
res = res * 10 + temp % 10
temp //= 10
# 第一次运算后:res = 0 * 10 + 1 = 1 x = 121
# 第二次运算后:res = 1 * 10 + 2 = 12 x = 12
# 第三次运算后:res = 12 * 10 + 1 = 121 x = 0
结果对比
解法 | 结果 | 运行时间 | 内存消耗 |
---|---|---|---|
解法一 | 通过 | 76ms | 13.7MB |
解法二 | 通过 | 88ms | 13.7MB |
两种结果中,差距不是很大,解法一形式简单,效率高,比较推荐。