7:整数反转(C++)

题目地址https://leetcode-cn.com/problems/reverse-integer/

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

题目示例

示例 1:

输入: 123

输出: 321

示例 2:

输入: -123

输出: -321

示例 3:

输入: 120

输出: 21

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路

思路1:逆序累加处理,需要注意的是逆序结果可能出现溢出情况,为避免此种情况,使用long long类型存储反转结果,并对大于上限和下限值返回0,同时,因为负数取模结果还是负数,所以无需额外处理,时间复杂度O(logn)。

思路2:整数转换字符串处理,利用to_strin()函数将整数x转换为字符串s,然后使用反转函数reverse()将除过符号位的数字进行反转,最后进行溢出判断即可。

程序源码

思路1

class Solution {
public:
    int reverse(int x) {
        long res = 0;
        while(x)
        {
            res = res *10 + x % 10;
            x /= 10;
        }
        if(res < INT_MIN || res > INT_MAX) return 0;
        return res;
    }
};

思路2

class Solution {
public:
    int reverse(int x) {
        long res;
        string s = to_string(x);
        int pos = s.find_first_not_of('-'); //在字符串s中寻找第一个不以'-'字符开始的位置
        std::reverse(s.begin() + pos, s.end()); //对字符串是种除符号位的其它字符进行反转操作,
        istringstream cout(s);
        cout >> res; //将string类型反转结果转换为long类型并输出到res中
        if(res > INT_MAX || res < INT_MIN) return 0; //溢出判断
        return res;
    }
};

原文链接: https://www.cnblogs.com/wzw0625/p/13414106.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/200976

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:38
下一篇 2023年2月12日 下午8:38

相关推荐