7. 整数反转

时间:2022-4-17    作者:老大夫    分类: 力扣


题目地址: https://leetcode-cn.com/problems/reverse-integer/submissions/

题目要求:

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

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

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

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

-2^31 <= x <= 2^31 - 1

代码

class Solution {
    public int reverse(int x) {
       int flag=1;
        if(x<0) flag=-1;
        x=Math.abs(x);
        int resault=0;

        while(x!=0){
            int temp= x % 10 + resault*10;        //结果乘以10+个位数
            //判断是否越界,还原上一次的运算是否正常,超出int 4字节范围加法会变得不正常
            // 临时值-个位数/10  就是已经排好的resault部分,如果不相同说明上次累加有问题
            if(( temp - x % 10) / 10 !=resault) {
                return 0;
            }
            resault=temp;
            x=x/10;
        }
        return resault*flag;
    }
}

思路

判断数字正负,保存下符号
把数字弄成绝对值,方便统一计算方法
利用每次取个位数倒着排的方法实现倒序
利用加法是否能正常运行,判断是否越界

难点

判断数字越界范围
如何反转数字

解决方法

  1. 超过范围的加法是不能正常进行的,直接判断每次增加一位数的结果是否正常即可
  2. 每次用%10取模个位数,然后倒排即可

学习视频

https://www.bilibili.com/video/BV1654y1D7u1?spm_id_from=333.794.header_right.history_list.click


扫描二维码,在手机上阅读

推荐阅读: