算法之争:LeetCode07整数反转

2020-05-22  本文已影响0人  司徒新新
题目:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:
输入: 123
输出: 321
 
示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。


每天一点点进步吧,感觉自己好菜,哈哈!什么都不会!


没看答案的时候,觉得听见的,也容易想,就是得10的余数然后放在乘10,觉得思路也很简单.就简单的写了一下!然后判断一下是否有越界.就ok了.

class Solution {
    public int reverse(int x) {
        int result = 0;
        while (x != 0) {
            if ((x > 0 && result > ((Integer.MAX_VALUE - (x % 10)) / 10)) || (x < 0 && result < ((Integer.MIN_VALUE - (x % 10)) / 10))) {
                return 0;
            }
            result = result * 10 + (x % 10);
            x = x / 10;
        }
        return result;
    }
}

嗯...对了...

时间复杂度:O(log(x)),x 中大约有 log/10(x) 位数字。
空间复杂度:O(1)。

这个我觉得还可以,比较简单的,然后我去看了别人!

看到别人的思路,真的是对自己有很大的启发,比如这段代码!

敲重点

class Solution {
    public int reverse(int x) {
        int res = 0 ;
        while(x != 0){
            int temp = x % 10 + res * 10;
            if((temp - x % 10) / 10 != res){ //最关键的一步
                return 0 ;
            }
            res = temp ;
            x /= 10 ;
        }
        return res ;
    }
}
解题思路

依次取出当前数字的最后一位数,累加。
关键在于如何判断整数溢出:将每次操作后的数字用临时变量存储,对该变量“反操作”,若与操作前的结果不等,则发生溢出,直接返回0
点击查看原讲解

这个对我的启发很大,这也是另一种思路去验证是否溢出,而且我觉得这种思路更加简单易懂.牛人太多了.也是学习到了! 给这位坐着大大点个赞!
继续坚持! 加油!

上一篇下一篇

猜你喜欢

热点阅读