其他分享
首页 > 其他分享> > [Leetcode] #7 整数反转

[Leetcode] #7 整数反转

作者:互联网

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

输入:x = 123

输出:321

我能想到的有两种思路。一是通过数学方式反转,二是通过字符串反转。

解法一:

先以123为例,思考其变化过程(其实就是加减乘除拼出答案,找规律再整理出来)

class Solution {
    public int reverse(int x) {
        
        int res = 0;//x = 123
        
        res*10//0
        x%10//3 
        res = res*10 + x%10;//0 + 3

        x = x/10;//12
        res*10//30
        x%10//2
        res = res*10 + x%10 //30 + 2
        
        x = x/10;//1
        res*10//320
        x%10//1
        res = res*10 + x%10 //320 + 1
        
        return res;

    }
}

提取公共部分转化为循环

class Solution {
    public int reverse(int x) {

        int res = 0;
        while(x != 0) {
            res = (res * 10) + (x % 10);
            x /= 10;
        }
        return res;

    }
}

提交后提示解答错误,看评论才知道还需要考虑反转后是否溢出(-231 <= x <= 231 - 1

优化(参考评论)

class Solution {
    public int reverse(int x) {

        int res = 0;
        while(x != 0) {
            int tmp = res; // 保存计算之前的结果
            res = (res * 10) + (x % 10);
            x /= 10;
            // 将计算之后的结果 / 10,判断是否与计算之前相同,如果不同,证明发生溢出,返回0
            if (res / 10 != tmp) return 0; 
        }
        return res;

    }
}

解法二

未完待续...

标签:10,return,int,反转,整数,x%,res,Leetcode
来源: https://www.cnblogs.com/jpppp/p/15016573.html