返回

解密LeetCode经典题之【整数反转】

前端

题目理解

给你一个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的经典题目,方法一利用字符串的反转函数,方法二采用逐位反转的策略。在实际应用中,可以根据具体场景选择合适的方法。