LeetCode-整数反转

LeetCode-整数反转

题目回顾

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

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

题解

参考[题解]
时间复杂度是 O ( n ) O(n) O(n)
空间复杂度 O ( 1 ) O(1) O(1)
执行用时: 4 m s 4 ms 4ms

不需要把整数转换为字符转来反转,也不用考虑为反转前最后连续的几个都是0,反过来没影响

p o p = x % 10 , x = x / 10 pop=x\%10,x=x/10 pop=x%10,x=x/10获取末尾数字

r e v = r e v ∗ 10 + p o p rev=rev*10+pop rev=rev10+pop来反转

但是需要考虑反转的时候溢出的情况,对于有符号的int32位的范围为 − 2 31 = − 2147483648 , 2 31 − 1 = 2147483647 -2^{31}=-2147483648,2^{31}-1=2147483647 231=2147483648,2311=2147483647,主要检查反转时的最后一位和倒数第二位。

如果 x x x为正数,

当前的 r e v > I N T M A X 10 rev>\frac{INTMAX}{10} rev>10INTMAX时, r e v = r e v ∗ 10 + p o p rev=rev*10+pop rev=rev10+pop将超过 2 31 − 1 2^{31}-1 2311,溢出,

或者 r e v = = I N T M A X 10 a n d p o p > 7 rev==\frac{INTMAX}{10} \quad and \quad pop>7 rev==10INTMAXandpop>7时,也将超过 2 31 − 1 2^{31}-1 2311,溢出。所以如果出现溢出的情况,我们 r e t u r n 0 return 0 return0

如果 x x x为负数情况类似。

cpp 代码实现

class Solution {
public:
    int reverse(int x) {
        int rev=0;//存放反转后的数
        int pop=0;//存放弹出的数
        while(x!=0)
        {
            pop=x%10;
            x=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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值