LeedCode 之 Reverse Integer

来源:互联网 发布:线下数据采集 编辑:程序博客网 时间:2024/05/28 14:57

目前先是挑选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