Reverse Integer


Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

此题看似简单,但有几种情况要注意:对于10这种数字的处理;对于溢出的处理。

溢出不意味着ans_before<ans,溢出以后可能还是大于上次的数。

解法一:采用x=reverse(reverse(x)) 的技巧判断是否溢出:

public class Solution {//采用了reverse的reverse是数字本身的思想来防止溢出。特殊:0,10
    public int reverse(int x) {
        if(x==0)
        {
            return 0;
        }
        int temp=Math.abs(x);
        
        while(temp%10==0)
        {
            temp/=10;
        }
        if(temp!=reverse_num(reverse_num(temp)))
        {
            return 0;
        }
        if(x<0)
        {
            return -reverse_num(temp);
        }
        else return reverse_num(temp);
    }
    public int reverse_num(int x)
    {
        int ans=0;
        int temp=x;
        //boolean overflow=false;//溢出判定
        while(temp!=0)
        {
            ans=ans*10+(temp%10);
            temp/=10;
        }
        return ans;
    }
}

解法二:利用ans 和 Integer.MAX_VALUE/10 比较发现溢出。


public class Solution {//采用了ans和MAX_VALUE/10进行比较发现溢出。
    public int reverse(int x) {
        int ans=0;
        int temp=x;
        while(temp!=0)
        {
            if(Math.abs(ans)>(Integer.MAX_VALUE/10))
            {
                return 0;
            }
            ans=ans*10+(temp%10);
            temp/=10;
        }
        return ans;
    }


}

1. 负数和正数不用区别对待。

2. -ans表示ans的负数。


posted @ 2015-02-04 17:38  evashi  阅读(141)  评论(0编辑  收藏  举报