leetcode菜鳥渡劫系列,從簡單的開始,讓開始變得簡單。給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123示例 2:輸出: 321
輸入: -123示例 3:輸出: -321
輸入: 120注意:輸出: 21
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
低配版
這道題的關鍵點就是整數反轉+防止溢位,那麼整數反轉有個最簡單的方式就是借助字串去實現反轉(如果輸入數字為負數那麼需要考慮反轉後將「-」移動),反轉後轉為long型別防止int的溢位風險,然後再判斷反轉後的數字是否在整數範圍內即可。下面來看下**實現:
高配版public
static
intreverse
(int x)
long result = long.
valueof
(num)
;//溢位判斷,是否在int範圍內
if(result < integer.min_value || result > integer.max_value)
//最後轉為int返回結果
return integer.
valueof
(result.
tostring()
);}
上面那種方式是可以完成這道題目,而且思路也很容易想出來,只是效能會比較差,而且這樣的實現也不太優雅。下面換一種方法來實現,就是運用一些運算方式,彈出與推入數字完成數字的反轉,看下**實現,很容易理解。
經典版public
static
intreverse
(int x)
//校驗數字是否在int範圍內
if(num > integer.max_value || num < integer.min_value)
return
(int
)num;
}
這種方式是比較官方的解決方式,其實是和第二種方法思路是一致的,只不過他是在數字彈出和推入的過程中進行溢位的校驗,這種方式比第二種方式會更優一些。
//與第二種方式類似,只不過溢位檢查放在了while內,在迴圈內的溢位檢查還需考慮臨界值的情況
public
intreverse
(int x)
if(num < integer.min_value/
10||
(num == integer.min_value /
10&& pop <-8
))num = num *
10+ pop;
}return num;
}
暫時只寫了這三種方式,不知道大家還有沒有更好的解決方案
leetcode反轉整數
題目 反轉整數 給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 2 31,231 1 根據這個假設,如果反轉後的整數溢...
leetcode 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321示例 2 輸入 123 輸出 321示例 3 輸入 120 輸出 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數...
LeetCode 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。題目並不難,重點在於處理溢位問題。int max 2147483647 int min...