Problem Description:
Given an integer x
, return true
if x
is palindrome integer.
An integer is a palindrome when it reads the same backward as forward. For example, 121
is palindrome while 123
is not.
题目要求判断一个数是否是回文数。回文数就是正着读和倒着读一样的数。
思路一:
由题目所给的example所得,负数都不是回文数,所以先进行判断一下是否为负数,是的话直接判false。0是回文数,其余以0结尾的数不是回文数。其他数使用python切片 step = -1 生成其逆序数,与之本身进行比较,如果相等则是回文数。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
rtype = False
if x < 0:
return rtype
elif x == 0:
rtype = True
return rtype
elif x % 10 == 0:
return rtype
else:
if int(str(x)[::-1]) == x:
rtype = True
return rtype
else:
return rtype
结果如下:
合并一下判断的情况:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
rtype = False
if x < 0:
return rtype
else:
if int(str(x)[::-1]) == x:
rtype = True
return rtype
else:
return rtype
结果如下:
扩展:
Follow up: Could you solve it without converting the integer to a string?
这里有一个扩展,意思是如果不使用转化为字符串处理的话,怎么判断回文字。
思路一:
虽然不能转字符串,但仍可以生成一个逆序数,通过比较逆序数和原数是否相等来判断原数是否为回文数。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
rtype = False
if x < 0:
return rtype
else:
x_new = 0
x_original = x
while x:
x_new = 10 * x_new + x % 10
x = x // 10
if x_new == x_original:
rtype = True
return rtype
else:
return rtype
结果如下:
思路二:
优化一下,不需要生成完整的逆序数,生成一半就行。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
rtype = False
if x < 0 or (x % 10 == 0 and x!=0):
return rtype
else:
new_x = 0
x_original = x
while x > new_x:
new_x = 10 * new_x + x % 10
x = x // 10
if new_x == x or new_x / 10 == x:
rtype = True
return rtype
else:
return rtype
结果如下: