LeetCode7 整数反转

LeetCode7 整数反转

反转整数的思路很简单,取余除10就完事了,主要是对大数的处理,也就是如何判断越界了。
因为整型范围是-2147483648 <x<2147483647,所以在每次处理之前判断反转的数是否大于了边界数除以10就好了,大于了就说明加上当前余数肯定会超过范围,就直接返回0;小于可以继续,添加后一位并不会超过边界;等于的时候,要看当前余数,是否大于7或者小于-8,但是如果该数满足这个条件了,那说明所给的数就不在整型范围内了,整形范围内的最后一位数只能小于等于2,因此等于和小于一样不用处理。
这个之前做过,也就直接秒了

class Solution {
    public int reverse(int x) {
        int y = x < 0 ? -x : x;
        int res = 0;
        while(y > 0){
            int temp = y % 10;
            if(res > 214748364 || (res == 214748364 && temp > 7))
                return 0;
            res = res * 10 + temp;
            y /= 10;
        }
        return x < 0 ? -res : res;
    }
}

或者也能转换成字符串处理,但是因为题目中有一句话:假设环境不允许存储 64 位整数(有符号或无符号),所以好像不太行

class Solution {
    //转换为字符串,再反转的方法
    public int reverse(int x) {
        if(x == Integer.MIN_VALUE) return 0;//因为该数的绝对值越界了,而且其翻转的结果超过了int范围,这里直接处理
        boolean mark = true;//该标记位用来记录x是正数还是负数
        if(x < 0) {//如果x是负数,则改变标记位,同时将负数变成正数
            mark = false;
            x = -x;
        }
        String str = Integer.toString(x);//正数变成字符串String
        StringBuffer stringBuffer = new StringBuffer(str);//字符串String变成StringBuffer
        str = stringBuffer.reverse().toString();//StringBuffer翻转在变回字符串String
        long result = Long.parseLong(str);//字符串变成长整型,这里为什么用长整型来接收,是因为有很多数已经越界了
        if(mark == false) {//如果标记位为负数,则转回负数
            result = 0 - result;
        }
        if(result>Integer.MAX_VALUE || result<Integer.MIN_VALUE) {//如果翻转后的数字超过int类型范围,则返回0
            return 0;
        }
        return (int)result;
    }
}


这里突然想到,因为我的代码中要取反,但是MIN_VALUE取反会超过整形的范围,那么应该是多少呢
去查看了一下,MAX_VALUE + 1 = MIN_VALUE
abs(MIN_VALUE)或者 -MIN_VALUE都是MIN_VALUE
记住了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值