栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Leetcode7 整数翻转

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode7 整数翻转

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

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

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

输入:x = 123
输出:321
输入:x = 120
输出:21

思路

记 textit{rev}rev 为翻转后的数字,为完成翻转,我们可以重复「弹出」xx 的末尾数字,将其「推入」textit{rev}rev 的末尾,直至 xx 为 00。

要在没有辅助栈或数组的帮助下「弹出」和「推入」数字,我们可以使用如下数学方法:


// 弹出 x 的末尾数字 digit
digit = x % 10
x /= 10

// 将数字 digit 推入 rev 末尾
rev = rev * 10 + digit
题目需要判断反转后的数字是否超过 3232 位有符号整数的范围 [-2^{31},2^{31}-1][−2 
31
 ,2 
31
 −1],例如 x=2123456789x=2123456789 反转后的 textit{rev}=9876543212>2^{31}-1=2147483647rev=9876543212>2 
31
 −1=2147483647,超过了 3232 位有符号整数的范围。

因此我们需要在「推入」数字之前,判断是否满足

-2^{31}letextit{rev}cdot10+textit{digit}le2^{31}-1
−2 
31
 ≤rev⋅10+digit≤2 
31
 −1

实现代码:

public int reverse(int x){
    int res = 0;
    while( x != 0){
        if(res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE){
            return 0;
        }
        int digit = x % 10;//获取末尾数字
        x = x/10;//更新x的值(去掉末尾的数字)
        res = res * 10 + digit;
    }
    return res;
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/893274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号