LeetCode 整數反轉

2021-09-16 21:32:59 字數 1703 閱讀 5913

leetcode菜鳥渡劫系列,從簡單的開始,讓開始變得簡單。

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 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...