LeetCode OJ - Reverse Integer

Reverse digits of an integer.

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

click to show spoilers.

Have you thought about this?

Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!

If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.

Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?

For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

my answer:

public class Solution {

	public static int getReverse(ing x){
        String temp = x+ "";
        StringBuilder sb = new StringBuilder();

        for(int i=temp.length()-1;i>=0;i--){
        	sb.append(temp.charAt(i) + "");
        }

        int y = Integer.parseInt(sb.toString());
        return y;
    }

    public static int reverse(int x) {
    	long num;
        if(x>0 & x<Integer.MAX_VAVLUE){
        	num = getReverse(x);
        }else if(x<0 & x>Integer.MIN_VAVLUE){
        	num = -getReverse(-x);
        }else
        	num = 0;
    return num;        
    }

    public static void main(String[] args){

    	try{
    		int num = reverse(9646324351);
    	}catch (Exception e){
    		num = 0;
    	}
    	System.out.println(num);
    }
}
呃呃呃,首先不僅是編譯沒通過(說 過大的整數:9646324351)(覺得我有判斷int的範圍呀 爲啥木有篩出去=.=)。其次,算法太複雜了吧...我都給自己跪了...最重要的是,沒有想到,如果int x 在範圍內,revers x 還是否在範圍內呢? 總之漏洞百出,有待改善...

參考:http://blog.csdn.net/zhouworld16/article/details/16067825

改進:

public class Solution {

    public static int reverse(long x) {

    	if(x> Integer.MAX_VALUE || x<Integer.MIN_VALUE)
    		return 0;

    	long y = x;
    	long num = 0;
    	while(y!=0){
    		long temp = y%10;
    		num = num*10 + temp;		
    		if(num > Integer.MAX_VALUE/10 || num<Integer.MIN_VALUE/10){   			
    			if(num > Integer.MAX_VALUE || num<Integer.MIN_VALUE  ){
    				return 0;
    			}
    				
    		}
    		y/=10;
    		
    	}
    	return (int)num;        
    }

    public static void main(String[] args){

    	//int num = reverse(9646324351);
    	//int num = reverse(1534236469);
    	int num = reverse(-2147483648);
    	System.out.println(num);
    }
}

Runtime:3ms



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章