#法1:以数值形式,数学运算方法(个十百千万..)全部倒序判断是否两数相同
#time:52ms
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0:return False
origin=x
r = 0 # 初始值
while x > 0:
r = r * 10 + x % 10 #"%"表示取余数 比如7/4 结果为3
x //= 10 #这里必须用//=,"//"表示整数除法,返回整数 比如 7/3 结果为2;"/"表示浮点数除法,返回浮点数 (即小数) 比如 8/2 结果为4.0
return r == origin
'''
#法2:以数值形式,数学运算方法(个十百千万..)对折倒序(一半数字)判断是否两数相同
#time:52ms
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 or (x % 10 == 0 and x != 0):
return False
ans = 0
while x > ans:
ans = ans * 10 + x % 10
x //= 10
return x == ans or x == (ans // 10)
'''
'''
#法3:使用字符串逆序检索,判断字符串是否相同
#time:100ms
class Solution:
def isPalindrome(self, x: int) -> bool:
return str(x)[ : : -1] == str(x)
'''
if __name__=='__main__':
#x=12321
x=0
a=Solution()
print(a.isPalindrome(x))
一些相关知识(字符切片):
负数(-)表示从后往前遍历,正数从前往后遍历
举例如下:
给你一个例子看看:
>>> a='0123456'
>>> a[1:5]
'1234'
返回结果是1234,能理解么?第一位到第五位切片(初始是0位)
>>> a[1:5:2]
'13'
这个呢?能理解么?1-5位切片,步进为2,所以取出来是‘13’
那么问题就来了[::-1]表示的是从头到尾,步长为-1,你感受一下。