- 题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 示例1
输入: 121
输出: true
- 示例2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
- 示例3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
- 解决方案一
受题目启发,将整数转换为字符串,判断正序与倒序字符串是否相等
- 代码一
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
flag = False
str_1 = str(x)
str_2 = str_1[::-1]
if str_1 == str_2:
flag = True
return flag
- 解决方案二
首先排除x是负数的情况,肯定不是回文数,然后依次比较x的最高位数字和最低位数字,需要借助一个记录当前数字x共有多少位的变量d,在比较的循环中,x需要不断去掉最高位和最低位,因此每进行一次循环,d就需要除以100
需要注意的是,while循环的条件是x>0,而不是x>=10,我第一次出错就是因为没想清楚这个道理。执行报错了才知道。如果输入是1000021的话,那么一次循环之后,x变为00002,仍旧需要在循环中进行比较,而如果按照x>=10的条件来执行,就会直接返回true的结果,出现错误。
- 代码二
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
flag = True
#如果x是负数的话,肯定不是回文数
if x < 0:
flag = False
return flag
#计算x共有多少位
d = 1
while x/d >= 10:
d = d * 10
#循环取x的最高位和最低位,每次比较
#即使x是个位数,也需要在循环中比较,可能出现x=00002的情况
while x > 0:
#q是x的最高位
q = x/d
#r是x的最低位
r = x%10
if q != r:
flag = False
return flag
#去掉x的最高位和最低位
x = x%d/10
d = d / 100
return flag