美文网首页
算法之争:LeetCode07整数反转

算法之争:LeetCode07整数反转

作者: 司徒新新 | 来源:发表于2020-05-22 16:45 被阅读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
    点击查看原讲解

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

    相关文章

      网友评论

          本文标题:算法之争:LeetCode07整数反转

          本文链接:https://www.haomeiwen.com/subject/fjaqahtx.html