当前位置:首页 > 力扣 > 力扣第7题整数反转:简洁高效的C++代码

力扣第7题整数反转:简洁高效的C++代码

7个月前 (08-02)

力扣第7题整数反转:简洁高效的C++代码 力扣题解 C++实现 第1张

一、题目解读

LeetCode第7题“整数反转”要求将给定整数x反转后返回,但需考虑整数溢出的边界情况。例如,输入123反转后为321,但若x为1534236469,反转后超出int范围则需返回0。题目核心在于处理数字反转与溢出判断的逻辑设计。

二、解题思路

采用“逐位提取+边界检查”策略:

1. 循环提取末尾数字:通过x % 10获取末尾数,并x /= 10移除末尾位。

2. 溢出预判机制:每次构建反转数rev时,利用INT_MAX/INT_MIN的边界条件判断是否溢出。

3. 临界值优化:针对INT_MAX/INT_MIN的特殊情况(如末尾数为7或-8时),设计精准判断避免误判。

该解法无需额外空间,时间复杂度O(log x)。

三、解题步骤

1. 初始化:定义变量rev=0,用于存储反转结果。

2. 循环处理:

    当x≠0时循环:

        a. pop = x % 10提取末尾数字。

        b. x /= 10移除末尾位。

3. 溢出检查:

    若rev即将超过INT_MAX/INT_MIN(通过临界值比较),立即终止并返回0。

4. 构建反转数:rev = rev * 10 + pop,逐步累积反转结果。

5. 返回结果:循环结束后,返回最终rev值。

四、代码与注释

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x!= 0) {
            int pop = x % 10;  // 获取最后一位数字
            x /= 10;           // 移除最后一位
            
            // 检查是否溢出
            if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
            
            rev = rev * 10 + pop;  // 构建反转数字
        }
        return rev;
    }
};

五、总结

该解法利用整数边界特性,通过简洁的循环与条件判断,提高效率。核心启示:处理溢出问题时,需结合数据类型边界(如INT_MAX/INT_MIN)设计精准判断逻辑。对算法面试或编程实践中的边界问题具有参考价值。



原创内容 转载请注明出处

分享给朋友:

相关文章

LeetCode 537题解:复数乘法的C++高效实现与代码解析

LeetCode 537题解:复数乘法的C++高效实现与代码解析

一、题目解读LeetCode 537题要求实现两个复数的乘法,输入为形如"a+bi"的字符串,需输出乘积的复数形式。题目核心在于解析字符串中的实部与虚部,并应用复数乘法公式计算结果...

手搓顺序表实现栈 代码详解及新手教程——从原理到实现的完整指南

一、简介和特点顺序栈是一种基于数组实现的后进先出(LIFO)数据结构。通过动态数组管理存储空间,它具备以下特点:1. 数组存储:数据连续存储,支持随机访问,访问效率高。2. 动态扩容:当栈满时自动扩展...

力扣面试题02.05链表相加:虚拟头节点+迭代解法的详细解析

力扣面试题02.05链表相加:虚拟头节点+迭代解法的详细解析

一、题目解读力扣面试题02.05要求将两个链表表示的整数相加,每个节点存储一位数字(逆序),结果同样以链表形式返回。例如,链表1为7→2→4,链表2为5→6→3,相加结果应为2→9→8→7。题目难点在...

LeetCode 1031题解析:不重叠子数组最大和的解法(前缀和+动态规划)

LeetCode 1031题解析:不重叠子数组最大和的解法(前缀和+动态规划)

一、题目解读LeetCode 1031题要求在不重叠的前提下,从给定数组nums中寻找两个长度分别为firstLen和secondLen的连续子数组,使其和最大。题目强调子数组必须不重叠,即两个子数组...

力扣1643题:第K小字典序路径(附C++代码与解题思路)

力扣1643题:第K小字典序路径(附C++代码与解题思路)

一、题目解读本题要求生成从原点(0, 0)到目标坐标(destination[0], destination[1])的路径中,字典序第K小的路径。路径仅由向下字符'V'(代表垂直移动)...

LeetCode 2576题解:双指针法求解最多标记下标(排序+贪心策略)

LeetCode 2576题解:双指针法求解最多标记下标(排序+贪心策略)

一、题目解读LeetCode 2576题要求在一个整数数组中寻找最多可标记的下标对:若 nums[i] * 2 <= nums[j](i ≠ j),则下标 i 和 j 可配对标记。例如,输入 [...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。