回数:从左往右读和从右往左读是一样的数。
判断方法有多种,可以先反转出从右到左的数字进行比较,也可以转成字符串进行字符比较等等,以下是相关总结。
一、使用数学方法计算反转之后的数字,进行对比
def is_palindrome(n):
if n < 0:
return False
temp_n = n
num = 0 #num反转之后的数字
while temp_n > 0:
num = num * 10 + temp_n % 10
temp_n = temp_n // 10
print(temp_n)
return num == n
注意:在while循环体中,temp_n = temp_n // 10 使用的是python的地板除 '//',确保得到整数。
python的整数运算永远是精确的,包括除法'/',两个整数做除法,即使整除结果仍然是浮点数,而地板除'//',确保两个整数相除结果是整数。举个例子,输入686,做除法,686/10 = 68.6,而地板除除法,686//10 = 68。
二、转换成字符串进行对比
def is_palindrome_slice(num):
if num < 0:
return False
str_num = str(num)
new_num = str_num[len(str_num)-1::-1]
return str_num == new_num
首先,先将数字转换成字符串,得到str_num,对字符串进行切片,得到从右到左的字符串new_num,再进行比对。
当然,转换成字符串之后,可以将字符串对半分,如果是回数,两边是对称的,对半分之后进行字符比较,代码如下:
def is_palindrome_slice(num):
if num < 0:
return False
str_num = str(num)
lens = len(str_num)
if lens % 2 == 1:
x = (lens+1)//2
else:
x = lens//2
return str_num[:x] == str_num[lens-1:lens-1-x:-1]
注意,在判断里面,用地板除,确保是整数,切片下标必须是整数。
以上整数转字符串的方法最终都使用了切片的形式进行比较,那有没有可以不用到切片的呢,当然有,可以跟第一种方法数字反转一样,将转换后的字符串进行反转然后比较,代码如下:
def is_palindrome_reverse(num):
if num < 0:
return False
str_num = str(num)
new_num = ''
for i in str_num:
new_num = i + new_num
return str_num == new_num