LeetCode刷题之旅(简单-2):整数反转

本文详细解析了两种整数反转算法:暴力拆解数字法和优化解法,并对比了其性能差异,展示了从77ms到6ms的优化效果。

2019年4月29日

目录

题目:整数反转

解答

解法一:暴力拆解数字

性能结果:

解法二:优化解法

分析:

性能结果:

小结:


 

题目:整数反转

解答

解法一:暴力拆解数字


public class IntegerInversion {

    public static int reverse(int x) {

        // 1.标识ture为正,false为false
        boolean symbol = true;
        if (x < 0){
            x = 0-x;
            symbol = false;
        }

        // 2.列表
        ArrayList<Integer> nums = new ArrayList<>();
        while (x>0){
            int a = x % 10; //取出最低位
            if (a >= 0){
                nums.add(0,a);//最低位靠前
            }
            x = x/10;
        }

        System.out.println("nums="+nums);

        // 3.逆转数字
        Double result = 0.0;
        for (int i=0; i <= nums.size()-1 ;i++){
            result += nums.get(i) * Math.pow(10,i);
            System.out.println("result="+result+" i="+i );

        }

        // 4.正数转负数
        if (!symbol){
            result = 0 - result;
        }

        // 5.溢出
        if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE){
            return 0;
        }
        return result.intValue();
    }

    public static void main(String[] args){
        int val = -901000;
        int reverse = reverse(val);
        System.out.println("val="+val+"   result="+reverse);
    }
}

性能结果:

 

解法二:优化解法

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

分析:

  • 时间复杂度:O(\log(x))O(log(x)),xx 中大约有 \log_{10}(x)log10​(x) 位数字。
  • 空间复杂度:O(1)O(1)。

性能结果:

 

小结:

优化算法的复杂度很重要啊。一个77ms,一个6ms,我对自己的实力表示无语。继续努力。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值