返回
解密LeetCode经典题之【整数反转】
前端
2024-01-18 22:48:09
题目理解
给你一个32位有符号整数x,返回将x中的数字部分反转后的结果。
如果反转后整数超过32位有符号整数的范围[−2^31, 2^31 − 1],就返回0。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
算法实现
方法一:字符串反转
思路
这种方法非常简单,首先将整数x转换为字符串,然后利用字符串的反转函数将其反转,最后将反转后的字符串转换为整数即可。
代码实现
def reverse(x):
"""
反转整数
Args:
x: 要反转的整数
Returns:
反转后的整数
"""
# 将整数转换为字符串
x_str = str(x)
# 反转字符串
x_str = x_str[::-1]
# 将字符串转换为整数
x = int(x_str)
# 判断反转后的整数是否超过32位有符号整数的范围
if x < -2 ** 31 or x > 2 ** 31 - 1:
return 0
# 返回反转后的整数
return x
# 测试用例
print(reverse(123)) # 321
print(reverse(-123)) # -321
print(reverse(120)) # 21
print(reverse(0)) # 0
方法二:逐位反转
思路
这种方法不需要将整数转换为字符串,而是逐位反转整数。
代码实现
def reverse(x):
"""
反转整数
Args:
x: 要反转的整数
Returns:
反转后的整数
"""
# 初始化反转后的整数
reversed_x = 0
# 逐位反转整数
while x != 0:
# 获取整数的最后一个数字
digit = x % 10
# 将最后一个数字添加到反转后的整数中
reversed_x = reversed_x * 10 + digit
# 将整数除以10,去除最后一个数字
x //= 10
# 判断反转后的整数是否超过32位有符号整数的范围
if reversed_x < -2 ** 31 or reversed_x > 2 ** 31 - 1:
return 0
# 返回反转后的整数
return reversed_x
# 测试用例
print(reverse(123)) # 321
print(reverse(-123)) # -321
print(reverse(120)) # 21
print(reverse(0)) # 0
总结
整数反转是LeetCode的经典题目,方法一利用字符串的反转函数,方法二采用逐位反转的策略。在实际应用中,可以根据具体场景选择合适的方法。