LeetCode——7.整数反转

题目:给出一个 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;

LeetCode——7.整数反转_第1张图片
总结:做题什么的,要非常非常主要界限,前几天的实验报告就吃了亏,这里也是同样的毛病。。

你可能感兴趣的:(LeetCode)