如何判断回文数
回文数是指正序(从左向右)和倒序(从右向左)读都相同的整数。例如,121是回文数,而123不是。
解法一:反转数字
一种简单直观的方法是将数字反转,然后判断反转后的数字是否与原数字相等。
def is_palindrome(num):
# 将数字转为字符串
num_str = str(num)
# 反转字符串
reversed_str = num_str[::-1]
# 判断反转后的字符串是否与原字符串相等
if num_str == reversed_str:
return True
else:
return False
上述代码中,我们首先将数字转为字符串,然后使用切片[::-1]反转字符串,最后判断反转后的字符串是否与原字符串相等。
以下是对该方法的测试:
print(is_palindrome(121))
print(is_palindrome(1234))
运行结果如下:
True
False
从运行结果中可以看出,对于回文数121,返回值为True,而对于非回文数1234,返回值为False。
解法二:逐位比较
另一种方法是逐位比较数字的首位和末位是否相等,然后继续比较剩余的数字。
def is_palindrome(num):
# 将数字转为字符串
num_str = str(num)
# 使用双指针,分别从两端向中间移动
left = 0
right = len(num_str) - 1
while left < right:
# 比较首位和末位数字是否相等
if num_str[left] != num_str[right]:
return False
# 移动指针
left += 1
right -= 1
return True
上述代码中,我们首先将数字转为字符串,然后使用双指针从两端向中间移动,比较首位和末位数字是否相等,如果不相等则返回False,直到指针相遇为止。
以下是对该方法的测试:
print(is_palindrome(121))
print(is_palindrome(1234))
运行结果如下:
True
False
从运行结果中可以看出,对于回文数121,返回值为True,而对于非回文数1234,返回值为False。
总结
本文介绍了两种判断回文数的方法,一种是将数字反转后比较,另一种是逐位比较数字的首位和末位。这两种方法都能有效地判断回文数,并根据实际需求选择适合的方法。
在实际编程中,我们可以根据具体情况选择合适的方法。如果内存空间允许,可以使用反转数字的方法;如果要求较高的效率,可以使用逐位比较的方法。
需要注意的是,在解题过程中应注意边界条件的处理。例如,对于负数,可以直接判断为非回文数;对于个位数,也可以直接判断为回文数。
最后,我们还可以对上述代码进行优化,减少不必要的比较次数。例如,当首位和末位数字不相等时,可以直接返回False,无需继续比较剩余的数字。