1. 程式人生 > >LeetCode演算法7:java 整數反轉

LeetCode演算法7:java 整數反轉

問題:
示例 1:
輸入: 123
輸出: 321

示例 2:
輸入: -123
輸出: -321

示例 3:
輸入: 120
輸出: 21

注意:
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

問題說明
問題的難度適中,主要考慮數學思維,已經計算機中對於邊界的處理技巧。這裡有個非常有趣的問題,對於溢位的資料,需要返回0。但是在計算機中,是不能真正讓資料溢位的現象出現的。
因此如何在資料溢位前判定其會溢位的可能,是該問題的核心難點。

程式碼

package _01_50;
public class _07ReverseInteger{
	public int reverse(int x){
		int out = 0;
		while(true){;
			if(out < (Integer.MIN_VALUE/10)) return 0;
			if(out> (Integer.MAX_VALUE/10))return 0;
			if(x<0){
				if((Integer.MIN_VALUE - x%10)>out*10) return 0;
				}	
			if(x>0){
				if((Integer.MAX_VALUE - x%10)<out*10) return 0;
				}
		//out*10 + x%10 compare with max_value
			out = out*10 + x%10;
			x = x/10;
			if(x==0) break;
			}
			return out;
	}

	public static void main(String[] arg){
		_07ReverseInteger ReverseInteger = new _07ReverseInteger();
		
		int a = 0;
		int b = -1234;
		int c = 45245245;
		int d = 1341350;
		int e = 12;
		System.out.println(ReverseInteger.reverse(a));
		System.out.println(ReverseInteger.reverse(b));
		System.out.println(ReverseInteger.reverse(c));
		System.out.println(ReverseInteger.reverse(d));
		System.out.println(ReverseInteger.reverse(e));
		}
}

參考:
JAVA判斷整數溢位