题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。如果转化后溢出了,就返回0
思路:
1.利用栈来进行反转
2.转化为字符串反向遍历
3.利用StringBuffer的reverse方法。
这里只展示第三种代码[前面两种大概原理都一样,主要是判定那一块]:
代码:
class Solution {
public int reverse(int x) {
if(x>=0)
{
StringBuffer a=new StringBuffer(""+x);
String b=a.reverse().toString();
long result=Long.parseLong(b);
if(result>(long)Integer.MAX_VALUE)
return 0;
return (int)result;
}
else
{
if(x==Integer.MIN_VALUE)//最小负数再按照下面的步骤处理会溢出
return 0;
StringBuffer a=new StringBuffer(Math.abs(x)+"");//先转化为正整数
String b=a.reverse().toString();
long result=Long.parseLong('-'+b);//转化为负数
if(result<(long)Integer.MIN_VALUE)
return 0;
return (int)result;
}
}
}
经过了这么久,我终于找出了我很久很久以前的bug。虽然这就是一道简单题,也确实不难。但是我七个月以前卡在这里,百思不得其解。需要判定最小负数,因为我下面是先把他转化为正整数的,这样,最小负数一转,还是本身【最大正整数加1又回到了最小负数,所以相当于没转】。。。。
if(x==Integer.MIN_VALUE)//最小负数再按照下面的步骤处理会溢出
return 0;
总结:做题什么的,要非常非常主要界限,前几天的实验报告就吃了亏,这里也是同样的毛病。。