返回
算法(LeetCode):回文数,300 题之九
前端
2024-02-18 19:08:52
一、题目
回文数是指从左向右读和从右向左读都是一样的数字。例如,121、1221、12321等都是回文数。
LeetCode 9题要求我们判断一个给定的整数是否是回文数。
二、解法总览(思维导图)
三、全部解法
- 方案 1
方案 1 的思路是将数字转换成字符串,然后使用字符串的反转函数判断字符串是否是回文。
def is_palindrome(x):
"""
判断一个整数是否是回文数。
参数:
x: 要判断的整数。
返回值:
如果x是回文数,返回True,否则返回False。
"""
# 将数字转换成字符串
x_str = str(x)
# 使用字符串的反转函数判断字符串是否是回文
return x_str == x_str[::-1]
# 测试
print(is_palindrome(121)) # True
print(is_palindrome(-121)) # False
print(is_palindrome(10)) # False
print(is_palindrome(-101)) # False
- 方案 2
方案 2 的思路是将数字反转,然后判断反转后的数字是否与原数字相同。
def is_palindrome(x):
"""
判断一个整数是否是回文数。
参数:
x: 要判断的整数。
返回值:
如果x是回文数,返回True,否则返回False。
"""
# 如果x是负数,直接返回False
if x < 0:
return False
# 将数字反转
reversed_x = 0
while x > 0:
reversed_x = reversed_x * 10 + x % 10
x //= 10
# 判断反转后的数字是否与原数字相同
return x == reversed_x
# 测试
print(is_palindrome(121)) # True
print(is_palindrome(-121)) # False
print(is_palindrome(10)) # False
print(is_palindrome(-101)) # False
- 方案 3
方案 3 的思路是使用数学运算来判断数字是否是回文。
def is_palindrome(x):
"""
判断一个整数是否是回文数。
参数:
x: 要判断的整数。
返回值:
如果x是回文数,返回True,否则返回False。
"""
# 如果x是负数,直接返回False
if x < 0:
return False
# 计算x的位数
num_digits = 0
while x > 0:
num_digits += 1
x //= 10
# 计算x的反转数
reversed_x = 0
for i in range(num_digits):
reversed_x *= 10
reversed_x += x % 10
x //= 10
# 判断反转后的数字是否与原数字相同
return x == reversed_x
# 测试
print(is_palindrome(121)) # True
print(is_palindrome(-121)) # False
print(is_palindrome(10)) # False
print(is_palindrome(-101)) # False
四、总结
回文数算法是一种非常简单的算法,但它在许多实际应用中都有着广泛的应用,例如密码学、数据压缩和数字签名等。回文数算法有多种实现方法,每种方法都有其自身的优缺点。在实际应用中,我们可以根据具体的场景选择最合适的算法来实现。