算法思路练习004-反转数字

题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)

思路

首先想到的还是暴力破解。
使用%取余,将数字每个位置上的数字从小到大依次拿出来。然后再分别与10及10的n次方相乘之后相加得到反转结果。

代码尝试—没有写出来判断是否会超过范围

	@Test
    void reverseNum() {
        int x = 123;
        int result = 0;
        //对10取余,存入list
        List<Integer> l = new ArrayList<Integer>();
//        int[] temp = new int[32];
        int j = 0;
        while (x > 0) {
            int i = x % 10;
            l.add(i);
//            temp[j] = i;
//            j++;
            x /= 10;
        }
        Iterator<Integer> iterator = l.iterator();
        int len = l.size();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            result = result * 10 + next;
        }

        System.out.println(result);

    }

对比答案,能看到自己有多画蛇添足,另外,提前判断是否超int范围是重点

public int reverse(int x) {
            //弹出尾数,推入新的数字尾部
            int rev = 0;
            while (x != 0) {
                //弹出尾数
                int num = x % 10;
//            if(rev > (2^31)-1  )//不能直接比较,如果成立的话,说明rev已经大于32位int整数的最大值,就会int报错,而题目要求不能使用64位long型,所以需要改变判断方式
                if (rev > 214748364 || (rev == 214748364 && num > 7)) {
                    return 0;
                }
                if (rev < -214748364 || (rev == -214748364 && num > 8)) {
                    return 0;
                }
                //将尾数推入rev的最低位
                rev = rev * 10 + num;
                x = x / 10;

            }
            return rev;

        }

在数字超过232-1之前判断出来是否会大于Interger.MAX

在这里插入图片描述

if (rev > 214748364 || (rev == 214748364 && num > 7)) {
                    return 0;
                }
if (rev < -214748364 || (rev == -214748364 && num > 8)) {
                    return 0;
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值