目前先是挑选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;
}
这么一个看似简单的题目,因为整数越界的问题,搞了快一个下午了,嘤嘤嘤,该怎么说好呢~ 不过最终还是解决了