LeedCode 之 Reverse Integer

目前先是挑选LeedCode上简单的题目来做~


题目链接:Reverse Integer

看到题目第一想法是:将整数转换为字符串,再使用字符串的反转函数reverse()函数将其反转,最后转为整数输出即可~
在这其中考虑到有负数的情况,所以先去绝对值进行反转处理,最后根据整数的正负情况返回对应的值~
其中需要注意的最重要的问题是整数越界
(因为整数越界调了将近1个小时,才解决,我太菜了 ̄へ ̄)
1、int类型的MIN_VALUE为-2147483648,取绝对值后比MAX_VALUE大产生,直接使用abs()函数无法取得正确的绝对值,因此首先对MIN_VALUE进行处理。
2、反转前后的值都不能产生越界,这里我使用整数—字符串—整数,因为没能判断反转后是否越界,在将字符串转为整数时,出现报错 “java.lang.NumberFormatException”,解决方法将取绝对值后的值的类型定义为long类型。
3、最后需要对反转后的num判断时候整数越界了

代码如下:

public class ReverseInteger {
    public int reverse(int x) {
        if(x==Integer.MIN_VALUE)  
            return 0;//int类型MIN_VALUE的绝对值比MAX_VALUE的绝对值大1,使用abs()函数无法取得正确的绝对值,所以需要对其先进行处理,其值为-2147483648,个位数为8,反转后肯定是越界了的
        long num = (long) Math.abs(x);//将取绝对值后的数定义为Long类型的,因为之后将其反转,如果整数越界了,则将String类型转为Int类型会报“java.lang.NumberFormatException”错误。
        String str;
        str = Long.toString(num);
        String reverse = 
        new StringBuffer(str).reverse().toString();
        num = Long.parseLong(reverse); 
        System.out.println(num);
        if (num > Integer.MAX_VALUE || -num < Integer.MIN_VALUE) //这里判断反转后的数值是否越界
            return 0;
        return (int) (x>0?num:-num); 
    }
}

同样是查看了网上其他人的解法,发现和自己的思路完全不同,是将其作为纯数学解法来的,于是乎尝试用相同解法~
1、同样是需要将反转后的数值先定义为long类型的
2、并需要判断反转后时候整数越界

public int reverseMath(int x){
        if(x == 0)
            return x;
        long tmp = 0;
        while(x!=0)
        {
            tmp = tmp*10 + x%10;
            x = x/10;
        }
        System.out.println(tmp);
         if (tmp > Integer.MAX_VALUE || tmp < Integer.MIN_VALUE) 
             return 0;
        return (int)tmp;
    }

这么一个看似简单的题目,因为整数越界的问题,搞了快一个下午了,嘤嘤嘤,该怎么说好呢~ 不过最终还是解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值