返回
刷题打卡-LeetCode 7.整数反转
前端
2023-12-17 23:21:02
开篇导语
在浩瀚的编程世界里,我们经常会遇到需要翻转整数的情况。从最简单的字符串反转到复杂的数据结构反转,无一不考验着程序员的功底。今天,我们就来挑战LeetCode 7.整数反转这道经典题目,一起探索整数反转的奥秘。
题目
给你一个32位的有符号整数x,返回x中每位上的数字反转后的结果。 如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。 假设环境不允许存储64位整数(有符号或无符号)。
解题思路
整数反转看似复杂,但其本质上是一个非常巧妙的算法。我们可以将整数的每一位数字依次提取出来,然后重新组合成一个新的整数。为了实现这个目标,我们可以借助取余和除法两种操作。
- 取余操作: 使用取余操作可以提取整数的最后一位数字。例如,对于整数123,我们可以使用123 % 10得到3。
- 除法操作: 使用除法操作可以将整数的最后一位数字去掉。例如,对于整数123,我们可以使用123 // 10得到12。
算法步骤
- 将整数x转换为字符串。
- 将字符串反转。
- 将反转后的字符串转换为整数。
- 检查转换后的整数是否在32位的有符号整数范围内。
- 如果在范围内,则返回转换后的整数,否则返回0。
代码实现
def reverse(x):
"""
:type x: int
:rtype: int
"""
# 将整数x转换为字符串
x_str = str(x)
# 将字符串反转
reversed_x_str = x_str[::-1]
# 将反转后的字符串转换为整数
reversed_x = int(reversed_x_str)
# 检查转换后的整数是否在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(1534236469)) # 0
复杂度分析
- 时间复杂度: O(n),其中n是整数x的位数。
- 空间复杂度: O(1),因为我们不需要额外的空间来存储中间结果。
结语
整数反转看似复杂,但其本质上是一个非常巧妙的算法。通过取余和除法两种操作,我们可以将整数的每一位数字依次提取出来,然后重新组合成一个新的整数。LeetCode 7.整数反转这道经典题目不仅考察了我们对整数的理解,也锻炼了我们解决问题的能力。