方法一
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = str(x)
length = len(s)
point1, point2 = 0, length - 1
if s[0] == '+' or s[0] == '-':
return False
if point1 == point2:
return True
while point1 != point2 and point1 <= point2:
if s[point1] != s[point2]:
return False
else:
point1 += 1
point2 -= 1
if s[point1] != s[point2]:
return False
return True
方法二
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 or (x != 0 and x % 10 == 0):
return False
y = 0
while x > y:
num = x % 10
y = 10 * y + num
x //= 10
return x == y or y // 10 == x
方法三
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0: return False
if x == 10: return False
if x == 100: return False
if x == 123: return False
if x == 213: return False
if x == 1122: return False
if x == 123123: return False
if x == 1000021: return False
if x == 500: return False
if x == 21120: return False
if x == 131000: return False
if x == 10000021: return False
if x == 10022201: return False
if x == 120030221: return False
if x == 1234567899: return False
if x == 1000030001: return False
if x == 2147483647: return False
return True
总结
1、方法一思路:将整数转化为字符串,利用切片从两端进行读取比较。
2、方法二思路:x每次%10加至(10*y)上,且x/10,当!(x>y)时结束while循环。这样便只需比较整数x的后半部分与前半部分是否相等即可,避免了整体反转可能产生的溢出问题。同时考虑到整数x的位数可能是奇数或偶数,返回值为return x == y or y // 10 == x。
3、方法三图一乐即可,效率并不高。