Python判断一个数是否为回文数

Python判断一个数是否为回文数

Python判断一个数是否为回文数

在数学上,回文数是指从左向右和从右向左读都是一样的数。例如,121和1221都是回文数,而123和1212则不是回文数。

在本文中,我们将使用Python编写一个函数来判断一个给定的整数是否为回文数。我们将通过不同的方法来实现这个功能,并测试这些方法的效率。

方法一:将整数转换为字符串

我们首先将整数转换为字符串,然后比较字符串的前半部分和后半部分是否相同。如果相同,则该整数为回文数。实现代码如下:

def isPalindrome(num):
    num_str = str(num)
    return num_str == num_str[::-1]

# 测试用例
print(isPalindrome(121))  # True
print(isPalindrome(1221))  # True
print(isPalindrome(123))  # False

以上代码中,我们先将整数转换为字符串num_str,然后使用字符串切片[::-1]来获得反转的字符串,最后比较两个字符串是否相同。运行结果如下:

True
True
False

方法二:原地比较

我们也可以不使用额外的空间来存储反转后的字符串,而是直接比较整数的前半部分和后半部分。具体步骤如下:

  1. 如果整数为负数或者以0结尾且不为0,则一定不是回文数,直接返回False。
  2. 初始化一个变量reverse_num为0,用于存储反转的后半部分数字。
  3. 每次取出整数的最后一位数字,将其加到reverse_num变量的末尾,并将整数除以10。
  4. reverse_num的值大于或等于原始整数的一半时,说明已经比较到一半,即可停止循环。
  5. 最后比较原始整数的前一半部分与reverse_num变量。
def isPalindrome(num):
    if num < 0 or (num % 10 == 0 and num != 0):
        return False

    reverse_num = 0
    while num > reverse_num:
        reverse_num = reverse_num * 10 + num % 10
        num //= 10

    return num == reverse_num or num == reverse_num // 10

# 测试用例
print(isPalindrome(121))  # True
print(isPalindrome(1221))  # True
print(isPalindrome(123))  # False

运行结果如下:

True
True
False

性能比较

为了比较两种方法的性能差异,我们使用timeit模块来对它们进行计时。以下是计时代码:

import timeit

# 方法一计时
time1 = timeit.timeit("isPalindrome(1234321)", setup="from __main__ import isPalindrome", number=1000000)
print(f"方法一平均用时:{time1} 秒")

# 方法二计时
time2 = timeit.timeit("isPalindrome(1234321)", setup="from __main__ import isPalindrome", number=1000000)
print(f"方法二平均用时:{time2} 秒")

运行结果如下:

方法一平均用时:0.3393128 秒
方法二平均用时:0.3186981 秒

通过比较方法一和方法二的计时结果,我们可以看到,方法二的性能略好于方法一,但二者差异不大。

结论

通过本文的分析,我们学习了如何使用Python编写一个函数来判断一个给定的整数是否为回文数。我们实现了两种不同的方法,并比较了它们的性能。在实践中,可以根据具体情况选择合适的方法来判断回文数,以提高代码效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程