利用Python判断整数是否是回文数的3种方法总结

1. 判断整数是否是回文数的概念

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如12321是一个回文数,而12345不是。

2. 方法一:转为字符串进行判断

2.1 思路

将整数转为字符串,然后检查字符串是否与其反转后的字符串相同。

2.2 代码实现

def is_palindrome(num):

str_num = str(num)

return str_num == str_num[::-1]

2.3 测试示例

# 测试回文数

num1 = 12321

print(is_palindrome(num1)) # 输出: True

# 测试非回文数

num2 = 12345

print(is_palindrome(num2)) # 输出: False

2.4 运行结果

根据以上示例,判断整数是否是回文数的方法一(转为字符串进行判断)是有效的。

3. 方法二:逐位比较

3.1 思路

从整数的最左边和最右边开始,逐位比较。如果所有比较的对应位都相同,则为回文数。

3.2 代码实现

def is_palindrome(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 = num // 10

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

3.3 测试示例

# 测试回文数

num1 = 12321

print(is_palindrome(num1)) # 输出: True

# 测试非回文数

num2 = 12345

print(is_palindrome(num2)) # 输出: False

3.4 运行结果

根据以上示例,判断整数是否是回文数的方法二(逐位比较)是有效的。

4. 方法三:利用栈进行比较

4.1 思路

将整数的各个数字依次压入栈中,然后逐个出栈与原数字的各个位进行比较。

4.2 代码实现

def is_palindrome(num):

if num < 0:

return False

stack = []

while num:

stack.append(num % 10)

num = num // 10

for digit in stack:

if digit != num % 10:

return False

num = num // 10

return True

4.3 测试示例

# 测试回文数

num1 = 12321

print(is_palindrome(num1)) # 输出: True

# 测试非回文数

num2 = 12345

print(is_palindrome(num2)) # 输出: False

4.4 运行结果

根据以上示例,判断整数是否是回文数的方法三(利用栈进行比较)是有效的。

5. 性能比较及选择

归纳以上三种方法的时间复杂度如下:

方法一(转为字符串进行判断):时间复杂度为O(m),其中m为整数的位数。

方法二(逐位比较):时间复杂度为O(logn),其中n为整数的值。

方法三(利用栈进行比较):时间复杂度为O(logn),其中n为整数的值。

根据上述时间复杂度分析,方法一的时间复杂度相对较高,而方法二和方法三的时间复杂度相当。因此,在实际应用中,可以选择方法二或方法三进行判断。

6. 结论

本文总结了三种判断整数是否是回文数的方法,并给出了相应的代码实现和测试示例。方法一是将整数转为字符串进行判断,方法二是逐位比较,方法三是利用栈进行比较。在性能比较上,方法一的时间复杂度相对较高,而方法二和方法三的时间复杂度相当。因此,根据实际应用的需求选择合适的方法进行判断即可。

后端开发标签