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

物联沃分享整理
物联沃-IOTWORD物联网 » python 实现判断是否为回文数算法

发表回复