返回

刷题打卡-LeetCode 7.整数反转

前端

开篇导语

在浩瀚的编程世界里,我们经常会遇到需要翻转整数的情况。从最简单的字符串反转到复杂的数据结构反转,无一不考验着程序员的功底。今天,我们就来挑战LeetCode 7.整数反转这道经典题目,一起探索整数反转的奥秘。

题目

给你一个32位的有符号整数x,返回x中每位上的数字反转后的结果。 如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。 假设环境不允许存储64位整数(有符号或无符号)。

解题思路

整数反转看似复杂,但其本质上是一个非常巧妙的算法。我们可以将整数的每一位数字依次提取出来,然后重新组合成一个新的整数。为了实现这个目标,我们可以借助取余和除法两种操作。

  1. 取余操作: 使用取余操作可以提取整数的最后一位数字。例如,对于整数123,我们可以使用123 % 10得到3。
  2. 除法操作: 使用除法操作可以将整数的最后一位数字去掉。例如,对于整数123,我们可以使用123 // 10得到12。

算法步骤

  1. 将整数x转换为字符串。
  2. 将字符串反转。
  3. 将反转后的字符串转换为整数。
  4. 检查转换后的整数是否在32位的有符号整数范围内。
  5. 如果在范围内,则返回转换后的整数,否则返回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.整数反转这道经典题目不仅考察了我们对整数的理解,也锻炼了我们解决问题的能力。