AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 商店
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

LeetCode 7. 整数反转    原题链接    简单

作者: 作者的头像   南街戏子 ,  2022-08-03 07:58:40 ,  所有人可见 ,  阅读 15


0


题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

样例

输入:x = 123
输出:321

算法1

(枚举) $O(log n)$

秦九韶算法:res = res * 10 + x % 10(将数字反转)
判断溢出:两种情况
1. res > 0时,res + x % 10 > INT_MAX
也就即res > (INT_MAX - x % 10) / 10
2. res < 0时,res + x % 10 < INT_MIN
也就即res < (INT_MIN - x % 10) / 10
在此过程中res不会越界,因为每一次都乘上10,如果符合上述结果的话早就return 0了

C++ 代码

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

算法2

使用long long的话

C++ 代码

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

更好的阅读体验

0 评论

你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息