题目要求:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例:
- 示例 1:
输入: 121
输出: true 示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
范例代码:
- 未进阶版本
# 此处先转化为字符串类型; 判断反转的字符串是否与未反转的字符串相同?
# 如果相同, 则返回True;
# 如果不相同, 则返回False;
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
return "x" == "x"[::-1]
- 进阶版本
思路:
- 负数不是回文数
- 10, 20,20,40~90……不是回文数;
- 假设需要判断的数为x,用一个名为back的数储存x后半段的数并且翻转,最后再比较x与back是否相等即可。如下图所示:
eg: 124421, 121
- 代码如下:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
# 负数和10,90,100等不是回文数
if x < 0 or (x!=0 and x%10==0):
return False
# 0是回文数;
elif x == 0:
return True
# 其他情况, 分别计算出back和x的值, 判断。
back = 0
while x > back:
back = back*10 + x%10
x = x/10
# 124421: x==back
# 121: x==back/10
return x==back or x==back/10