7.整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^ 31− 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0

提示:
-2^31 <= x <= 2^31 - 1

问题分析

我们需要反转一个 32 位有符号整数的数字部分,同时确保反转后的结果仍在 32 位有符号整数的范围内(即 ([-2^{31}, 2^{31} - 1]))。如果超出范围,则返回 0。

解决思路

  1. 处理符号:先记录整数的符号(正数或负数),然后将其转换为正数处理。
  2. 反转数字:通过取模和除法操作,逐步反转数字。
  3. 检查溢出:在反转过程中,检查结果是否超出 32 位有符号整数的范围。
  4. 返回结果:根据符号和反转后的数字返回最终结果。

以下是 Python、Java 和 C++ 的实现代码。


Python 实现

def reverse(x: int) -> int:
    INT_MAX = 2**31 - 1
    INT_MIN = -2**31
    
    # 记录符号
    sign = 1 if x >= 0 else -1
    x = abs(x)
    
    reversed_num = 0
    while x != 0:
        digit = x % 10
        x = x // 10
        
        # 检查是否溢出
        if reversed_num > (INT_MAX - digit) // 10:
            return 0
        
        reversed_num = reversed_num * 10 + digit
    
    return sign * reversed_num

# 示例测试
print(reverse(123))    # 输出: 321
print

你可能感兴趣的:(leetcode,算法,leetcode)