当前位置:   article > 正文

32 位的有符号整数_LeetCode整数反转

给出一个32位的有符号整数,反转

我们活着不能与草木同腐,不能醉生梦死,枉度人生,要有所作为。

785f8698021e4022420daf054d6a31d6.png


整数反转

今天给大家分享一下LeetCode上的一个题目——整数反转。

题目:给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转。(难度:简单)

示例1:

输入:123输出:321

示例2:

输入:-123输出:-321

示例3:

输入:120输出:21

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

考察内容

  • 如何反转整数的一位数字?

    重复“弹出”x的最后一位数字,并将其“推入”到rev的后面。

    “弹出”:pop=x%10;x=x/10;

    “推入”:rev=rev*10+pop;

c2fe539760179527ca7a724a685e3104.png

  • 如何检查溢出?

    limits.h中有表示int32最大值、最小值的长了INT_MAX和INT_MIN;

    由于“推入”时rev=rev*10+pop,因此对于正数,溢出会发生在rev*10+pop时,此时一定有rev>INT_MAX/10或者rev=INT_MAX/10&pop>7;

    负数同理。

代码实现(C++)

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_MAX/10 && (pop < -8)))            {                return 0;            }            rev = rev * 10 + pop;        }        return rev;    }};

复杂度分析

  • 时间复杂度:O(log(x))

  • 空间复杂度:O(1)


a64c285df8336c33cfd948e6e01ce03c.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/墨韵书生/article/detail/60480
推荐阅读
相关标签
  

闽ICP备14008679号