leetcode-cn.com/problems/re…java
給出一個 32 位的有符號整數,你須要將這個整數中每位上的數字進行反轉。算法
示例 1:bash
輸入: 123
輸出: 321
複製代碼
示例 2:函數
輸入: -123
輸出: -321
複製代碼
示例 3:spa
輸入: 120
輸出: 21
複製代碼
注意:3d
假設咱們的環境只能存儲得下 32
位的有符號整數,則其數值範圍爲 [−231, 231 − 1]
。請根據這個假設,若是反轉後整數溢出那麼就返回 0
。code
try catch
的方式來解決,第二個思路就是經過數學計算來解決。x
的每一位拆開,在計算新值時每一步都判斷是否溢出。MAX_VALUE
,另外一個是小於整數最小值MIN_VALUE
,設當前計算結果爲ans
,下一位爲pop
。ans * 10 + pop > MAX_VALUE
這個溢出條件來看
ans > MAX_VALUE / 10
且 還有pop須要添加
時,則必定溢出ans == MAX_VALUE / 10
且 pop > 7
時,則必定溢出,7
是2^31 - 1
的個位數ans * 10 + pop < MIN_VALUE
這個溢出條件來看
ans < MIN_VALUE / 10
且 還有pop須要添加
時,則必定溢出ans == MAX_VALUE / 10
且 pop < -8
時,則必定溢出,8
是-2^31
的個位數class Solution {
public int reverse(int x) {
int ans = 0;
while (x != 0) {
int pop = x % 10;
if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && pop > 7))
return 0;
if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && pop < -8))
return 0;
ans = ans * 10 + pop;
x /= 10;
}
return ans;
}
}
複製代碼
後臺回覆「算法」,加入每天算法羣 以爲算法直擊靈魂,歡迎點擊在看和轉發cdn