📅  最后修改于: 2023-12-03 14:46:40.057000             🧑  作者: Mango
回文数是指正序和倒序都相同的数,例如121、12321等。在Python中,判断一个数是否为回文数的方法有很多种。
将数值转为字符串,再将字符串反转,如果反转后字符串与原字符串相等,那么这个数就是回文数。
def is_palindrome(num):
str_num = str(num)
return str_num == str_num[::-1]
将数值转为字符串,然后逐位比较其首位、末位、次位、次末位…依次类推,如果在某一步时存在不同,则这个数不是回文数。
def is_palindrome(num):
str_num = str(num)
for i in range(len(str_num) // 2):
if str_num[i] != str_num[-i-1]:
return False
return True
将整数的首位和末位取出来,比较它们是否相等,如果不等,则这个数不是回文数。然后将整数去掉首位和末位,继续比较,直到整个数比较完毕。
def is_palindrome(num):
if num < 0:
return False
div = 1
while num // div >= 10:
div *= 10
while num > 0:
left = num // div
right = num % 10
if left != right:
return False
num = (num % div) // 10
div //= 100
return True
以上三种方法中,字符串反转法最为简单,但是它需要将整个整数转化为字符串,耗费了较多的空间。逐位比较法和取整数和余数法比较相似,它们的时间复杂度都是O(n),但是在Python中,取整数和余数法比字符串反转法更快一些。因此,我们可以使用取整数和余数法来判断一个数是否为回文数。
参考资料:
[1] https://zh.wikipedia.org/wiki/%E5%9B%9E%E6%96%87%E6%95%B0
[2] https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode-solution/