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

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

1天前

力扣第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 2523题解:寻找区间内最小间隔质数对(C++代码)

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

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

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

一、题目解读力扣LCR074题要求对给定的二维区间数组(每个区间由起始点和终止点构成)进行合并,将重叠的区间合并为更宽的区间,最终输出不重叠的合并结果。例如,输入[[1,3],[2,6],[8,10]...

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

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

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

发表评论

访客

看不清,换一张

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