【LeetCode】7.整数反转

📚 题目概要

将 32 位有符号整数反转,若反转结果超出范围 [-2^31, 2^31-1] 则返回 0。例如,输入 123 返回 321,输入 -123 返回 -321


🧰 前置知识

  • 整数运算 :取余(%)和整除(//)操作。
  • 溢出检查:理解 32 位整数范围(-2147483648 至 2147483647)。

🚧 问题难点

  1. 符号处理:需正确处理正负数的反转逻辑。
  2. 溢出检测:反转过程中需动态检查是否超出 32 位整数范围。
  3. 末尾零处理 :如输入 120 需返回 21,而非 021

🔑 关键思路

  1. 符号分离:先记录符号,将整数转为绝对值处理。
  2. 逐位反转:通过取余和整除操作逐位提取数字,构建反转后的绝对值。
  3. 溢出预判:在每一步计算中,提前判断反转后的数是否会溢出。

💻 代码实现

python 复制代码
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        sign = 1 if x > 0 else -1 # 记录符号位
        x_abs = abs(x) # 取x的绝对值进行运算
        res_abs = 0 # 记录反转后的结果
        while x_abs > 0:
            digit = x_abs % 10 # 记录个位数
            x_abs = x_abs // 10 # 记录去掉最后一位的数
            res_abs = res_abs * 10 + digit
        # 根据原符号定结果的符号
        res = res_abs if sign == 1 else -res_abs

        # 结果越界判断
        if res >= -2**31 and res <= 2**31 -1:
            return res
        else:
            return 0

📊 复杂度分析

  • 时间复杂度 :O(log(x)),数字位数决定循环次数(如 123 需 3 次循环)。
  • 空间复杂度:O(1),仅用常数级变量存储中间结果。

❗ 易错点与测试案例

易错点
  1. 忽略符号:未正确处理负数,导致反转后符号错误。
  2. 溢出检查遗漏:未预判溢出,导致最终结果错误。
测试案例
  • 案例1

    输入:x = 123

    输出:321

    解释:直接反转,结果在范围内。

  • 案例2

    输入:x = -123

    输出:-321

    解释:符号保留,绝对值反转。

  • 案例3

    输入:x = 2147483647

    输出:0

    解释:反转值为 7463847412,超过正数阈值。


🔗 总结与扩展

模式归纳
  • 逐位处理:适用于数字反转、回文数判断等问题。
  • 溢出预判:在计算过程中动态检查溢出,而非最后统一处理。
同类问题
  • 回文数判断:反转数字后与原数比较。
  • 字符串转整数:处理符号、非数字字符及溢出。
相关推荐
资深web全栈开发5 小时前
LeetCode 3573. 买卖股票的最佳时机 V - 动态规划解法详解
算法·leetcode·动态规划
Chen--Xing5 小时前
LeetCode LCR 119.最长连续序列
c++·python·算法·leetcode·rust
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2025.12.17 题目:3573.买卖股票的最佳时机Ⅴ
笔记·算法·leetcode
LYFlied6 小时前
【每日算法】LeetCode 739. 每日温度:从暴力遍历到单调栈的优雅解决
前端·算法·leetcode·面试·职场和发展
yaoh.wang6 小时前
力扣(LeetCode) 67: 二进制求和 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
夏鹏今天学习了吗6 小时前
【LeetCode热题100(74/100)】跳跃游戏
算法·leetcode·游戏
小年糕是糕手6 小时前
【C++】string类(二)
开发语言·数据结构·c++·程序人生·算法·leetcode·数字货币
Tisfy6 小时前
LeetCode 3573.买卖股票的最佳时机 V:深度优先搜索
算法·leetcode·深度优先
yaoh.wang6 小时前
力扣(LeetCode) 58: 最后一个单词的长度 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
LYFlied7 小时前
【每日算法】LeetCode239. 滑动窗口最大值
数据结构·算法·leetcode·面试