007整数反转

Posted lxr-xiaorong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了007整数反转相关的知识,希望对你有一定的参考价值。

写在前面,参考的是力扣官网的画解算法

一、java代码

/*
 * @lc app=leetcode.cn id=7 lang=java
 *
 * [7] 整数反转
 */

// @lc code=start
class Solution {
    public int reverse(int x) {

        //定义最后输出的结果为ans
        int ans=0;
        while (x!=0){

            //取个位
            int pop=x%10;
            //判断是否上溢出
            //1、ans>Integer.MAX_VALUE/10,还有pop需要添加
            //2、ans==Integer.MAX_VALUE/10 && pop>7,7是2^31-1的个位数
            if(ans>Integer.MAX_VALUE/10 || (ans==Integer.MAX_VALUE/10 && pop>7)){
                return 0;
            }

            //判断是否下溢出
            //1、ans<Integer.MIN_VALUE/10,还有pop需要添加
            //2、ans==Integer.MIN_VALUE/10 && pop<-8,8是2^31的个位数
            if(ans<Integer.MIN_VALUE/10 || (ans==Integer.MIN_VALUE/10 && pop<-8)){
                return 0;
            }

            //反转输出结果
            ans=ans*10+pop;
            //将数字x的每一位拆开
            x/=10;
        }

        //得到最后的结果
        return ans;

    }
}
// @lc code=end


二、思路分析

2.1溢出

1、通过字符串转换加try catch的方式来解决(效率低)

2、通过数学计算来解决

2.2思路

1、通过循环将数字x的每一位拆开,在计算新值时每一步都判断是否溢出

2、溢出的条件有两个

??(1)大于整数最大值MAX_VALUE

??(2)小于整数最小值MIN_VALUE

3、设当前计算结果为ans;下一位为pop

4、从ans*10+pop>MAX_VALUE这个溢出条件来看

??(1)当出现ans>MAX_VALUE/10还有pop需要添加时,则一定溢出

??(2)当出现ans=MAX_VALUE/10pop>7时,则一定溢出,7是2^31-1的个位数

5、从ans*10+pop<MIN_VALUE这个溢出条件来看

??(1)当出现ans<MIN_VALUE/10还有pop需要添加时,则一定溢出

??(2)当出现ans=MIN_VALUE/10pop<-8时,则一定溢出,8是2^31的个位数

三、画图举例

技术图片

拆解

3.1

技术图片

3.2

技术图片

3.3

技术图片

以上是关于007整数反转的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题-007反转整数

2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。(代码片段

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

如何在 BackStack 上反转片段动画?

LeetCode-Algorithms #007 Reverse Integer, Database #182 Duplicate Emails

L1-007. 念数字