[LeetCode]7. Reverse Integer (easy)

Welcome To My Blog

7. Reverse Integer (easy)

7.1.png
1. 在java中,数值溢出后还能计算,只不过得到的计算结果不正确,可以设置两个变量并利用这一点进行溢出判断
7.3.png
7.2.png
2. 因为在res = res * 10 + curr;形式下,0没有贡献,所以不用专门处理leading 0
3. 可以保留符号运算,负数+负数或者正数+正数,带符号运算时要注意循环条件是 x != 0,而不是x > 0
3. 题目要求溢出时返回0,在处理上与溢出时返回Max或Min有所不同
4. 按照一般情况和边界情况讨论
+ 一般情况: -123
+ 边界情况: 120,100100,翻转后溢出
+ 最高位取值范围[1,9],个位取值范围[0,9]
+ 保留符号
+ 避免0开头
+ 避免溢出

原始版本,正负数,leading 0以及判断溢出都不够简洁

    public static int reverse(int x) {
        int res = 0, curr = 0, sign = 1;
        //1. 提取符号
        sign = sign * x < 0 ? -1 : 1;
        //2. 转化为正数
        x = x * sign;
        while ( x > 0){
            //3. 当前的数字
            curr = x % 10;
            //4.1 个位数前面有几个数就要乘几次10;
            //4.2 十位数前面有几个数就要成几次10;同理...
            x /= 10;
            //5 avoid overflow
            boolean overflow =(res > Integer.MAX_VALUE / 10) || res == Integer.MAX_VALUE / 10 && (curr > Integer.MAX_VALUE % 10 || curr*sign < Integer.MIN_VALUE % 10 ) ;
            if (overflow) return 0;

            res = res * 10 + curr;
        }
        return res * sign;
    }

最优解

    public static int reverse(int x) {
        int res = 0;
        // 带符号运算的话这里得是 x!=0
        while (x != 0){
            int curr = x % 10;
            int tempRes = res * 10 + curr ;
            // if overflow?
            if((tempRes -curr) / 10 != res) return 0;
            res = tempRes;
            x /= 10;
        }
    return res;
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/littlehaes/article/details/79977165
文章标签: LeetCode
个人分类: 算法 LeetCode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

[LeetCode]7. Reverse Integer (easy)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭