题目描述:
-
判断一个整数是否是回文数。回文数是指正序(从左到右的)和倒序(从右向左)读都是一样的整数。
-
示例1:
- 输入:121
- 输出:true
-
示例2:
- 输入:-121
- 输出:false
- 解析:从左到右读,为-121。从右向左读,为121-。因此它不是一个回文数。
-示例3: - 输入:10
- 输出:false
- 解析:从右向左读,为01。因此它不是一个回文数。
-
进阶:
- 你能不将整数转为字符串来解决这个问题吗?
-
算法设计与分析:
- 两种方法
- 第一种:使用Python的切片法
- 第二种:使用纯数学的方法
- 思路:
- 1、第一步:根据题意知道,如果是负数,则一定不是回文数,直接返回false
- 2、第二步:如果是正数,将数字倒转,可以使用切片,也可以使用纯数学计算
- 3、第三步:比较倒转之后的两个数字,相等说明是回文数,返回True,否则返回
False。
- 两种方法
-
注意:切片法速度慢,数学方法速度快!不同数量级!
Python3的解法
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
# 方法一:
# 和整数倒转那道题类似,不要搞错括号的位置了!
# result = int(''.join(str(i) for i in list(str(x))[::-1]))
# 或者将上面式子拆开
# x = str(x)
# result= x[::-1]
# x = int(x)
# result = int(result)
# if x == result:
# return True
# else:
# return False
#方法二:不用字符串,使用数学的方法
cur = 0
num = x
while num != 0:
# 将数字从尾部到头部按位置反转,然后逐位增大
cur = cur * 10 +num % 10
num = num//10
return cur == x