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

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

6个月前 (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)设计精准判断逻辑。对算法面试或编程实践中的边界问题具有参考价值。



原创内容 转载请注明出处

分享给朋友:

相关文章

手搓邻接表类代码注释与详解:从零开始理解图数据结构(适合新手小白)

一、简介和特点邻接表是一种用于存储图(Graph)的数据结构,特别适合稀疏图(边数较少的图)。它通过链表的方式为每个节点维护其相邻节点的信息,既能高效节省空间,又能灵活支持图的动态操作。本文将基于您手...

【力扣2846题】图论+二进制提升:高效解决连通性问题(附C++代码)

【力扣2846题】图论+二进制提升:高效解决连通性问题(附C++代码)

一、题目解读力扣2846题要求解决一个基于图连通性的操作优化问题。给定一个无向图,包含边权重,以及一系列查询,每个查询询问两点间路径的最小操作次数。题目关键在于高效计算路径上权重分布的统计信息,并转化...

LeetCode 2523题解:寻找区间内最小间隔质数对(C++代码)

LeetCode 2523题解:寻找区间内最小间隔质数对(C++代码)

一、题目解读LeetCode 2523题要求在一个给定的整数区间 [left, right] 内,找到间隔最小的两个质数(即相邻质数的差值最小),并返回这对质数。若区间内不存在两个质数,则返回 [-1...

力扣2588题解:利用前缀异或和与哈希表求解美丽子数组问题

力扣2588题解:利用前缀异或和与哈希表求解美丽子数组问题

一、题目解读力扣2588题要求计算给定数组中“美丽子数组”的数量。所谓“美丽子数组”,是指子数组的异或和为0。题目关键在于理解子数组异或和的性质,并通过高效算法统计符合条件的子数组数量。二、解题思路采...

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

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

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

LeetCode 2466题解:统计构造好字符串的方案数(动态规划+模运算)

LeetCode 2466题解:统计构造好字符串的方案数(动态规划+模运算)

一、题目解读LeetCode 2466题要求统计在长度范围 [low, high] 内,由字符 '0' 和 '1' 构成的“好字符串”数量。好字符串定义为:每次可添加...

发表评论

访客

看不清,换一张

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