判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
- 你能不将整数转为字符串来解决这个问题吗?
👊常规思路:
-
先将整型转为字符串,根据python中[::-1]获得倒序的字符串,再转为整型。比较原始整数和回文数是否相等即可。
-
考虑特殊情况:
- 假如是负数,因为负号的关系,不可能是回文数
- 假如输入最后一位有零的情况,包含在正数的情况中了。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x >= 0:
reverse_x = int(str(x)[::-1])
return (x == reverse_x)
else:
return False
👍进阶思路:
-
直接利用整数来进行反转(特殊情况见常规思路)
-
需要知道:
- 整数(x)取余10可以得到整数(x)的最后一位,如
201%10=1
- 整数(x)整除10可以去除整数(x)的最后一位,如
201//10=20
(整除的原因去掉了小数0.1)
- 整数(x)取余10可以得到整数(x)的最后一位,如
-
对于主要代码的理解(假设现在输入是123)
-
reverse_x = reverse_x*10 + x%10
:就是取出个位,拼接到reverse_x
中,如果之后还有要拼接,原来的个位乘以10变成十位,依次类推 -
x //= 10
:不断把最后一位数去掉的过程
-
-
class Solution(object):
def isPalindrome(self, x):
if x < 0: # 负数的情况
return False
source_x = x # 相当于拷贝,后续x会进行一系列变化
reverse_x = 0
while x > 0:
# 循环为了得到倒序
reverse_x = reverse_x*10 + x%10
x //= 10
return source_x == reverse_x