LeetCode演算法7:java 整數反轉
阿新 • • 發佈:2018-12-23
問題:
示例 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判斷整數溢位