python 实现判断是否为回文数算法
判断是否为回文数算法介绍
判断一个数是否为回文数(即从前往后读和从后往前读都相同的数)的算法可以通过多种方法实现,以下是一种常见且效率较高的方法,即将整数转换为字符串,然后比较字符串的前半部分和反转后的后半部分是否相同。但是,对于大整数来说,这种方法可能会因为字符串处理而增加额外的空间复杂度。因此,更高效的算法是直接反转整数的一半来避免使用额外的空间。
以下是用Python实现的两种算法示例:
方法1:转换为字符串
def isPalindrome(x: int) -> bool:
# 负数不是回文数
if x < 0:
return False
# 将整数转换为字符串
str_x = str(x)
# 比较字符串的前半部分和反转后的后半部分
return str_x == str_x[::-1]
方法2:反转整数的一半
这种方法避免了使用额外的空间(除了几个整数变量),通过反转整数的前半部分,并将其与原始整数的后半部分进行比较来实现。
def isPalindrome(x: int) -> bool:
# 负数不是回文数
if x < 0 or (x % 10 == 0 and x != 0): # 排除负数和结尾为0但非0的整数
return False
reversed_half = 0
while x > reversed_half:
reversed_half = reversed_half * 10 + x % 10
x //= 10
# 当原始数字长度为奇数时,我们可以通过 reversed_half//10 去除处于中位的数字。
# 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,reversed_half = 123,
# 由于中间的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == reversed_half or x == reversed_half // 10
第二种方法在处理大整数时更加高效,因为它避免了将整个整数转换为字符串,并且只使用了常数级别的额外空间。然而,它也需要处理整数溢出的问题(在Python中,由于整数类型可以自动扩展以存储任意大小的数,因此不需要担心这一点,但在其他语言如C或Java中则可能需要考虑)。
判断是否为回文数算法python实现样例
以下是使用python实现判断是否为回文数的算法:
def isPalindrome(num):
# 将数字转换为字符串
str_num = str(num)
# 使用切片将字符串反转
reverse_str_num = str_num[::-1]
# 判断反转后的字符串是否与原字符串相同
if str_num == reverse_str_num:
return True
else:
return False
# 测试
print(isPalindrome(121)) # True
print(isPalindrome(1234)) # False
该算法首先将数字转换为字符串,然后使用切片将字符串反转。最后判断反转后的字符串是否与原字符串相同,如果相同则表示是回文数,返回True;否则表示不是回文数,返回False。
作者:luthane