leetcode 力扣 第七題 整數反轉

2021-10-10 15:01:57 字數 1325 閱讀 2298

基本思想:不斷取出原數的最後一位,排成新的數字

讓我們從最簡單的開始,怎麼才能不斷地拿到乙個整數的最後一位,比如123,我們要先拿到3再拿到2最後拿到1,很簡單,不斷地進行取模運算:

將123%10 拿到3 然後讓 123/10

將12%10 拿到2 然後讓12/10

將1%10 拿到1 然後 1/10

1%10 拿到0

對於int表示整型,會自動省略小數部分,也就是說如果我們使用乙個迴圈來進行上面的操作的話,迴圈結束的條件應該是輸入的變數=0,**如下所示:

int

reverse

(int x)

return ans;

}

上面的寫法是沒有考慮到記憶體溢位的,題目中說,

假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−2^31, 2^31 − 1]

有些數字反轉後就有可能超過上面的範圍,int 型別沒辦法再表示,當溢位時我們要返回0,**中有可能出現問題的就是ans = ans * 10 + pop;,所以我們要在它之前做判斷。

上面綠色部分表示的就是int型別能儲存的最大數,第二行的橘色5是大於第一行相同位置的4,也就是說不論5後面跟任何數字,都會溢位,即ans > integer.max_value / 10,就得返回0,還有另外一種情況就是第三四五行所展示的,ans == integer.max_value / 10,那就得判斷新取出來的這一位是不是>7,如果大於7溢位,反之正常。對於乙個負數,

思考方式相同,條件略有差別即ans == integer.min_value && pop < -8,這裡得和-8比較,看是不是超過能表示的下限,最終**:

int

reverse

(int x)

if(ans < integer.min_value /

10|| ans == integer.min_value && pop

) x /=10;

ans = ans *

10+ pop;

}return ans;

}

LeetCode第七題整數反轉

題目 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例示例 1 示例 2 示例 3 輸入 123 123 120輸出 321 321 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返...

LeetCode第七題 整數反轉

題目描述如下 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。輸入 123 輸出 321 輸入 123 輸出 321 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 int型別能表示數。請根據這個假設,如果反轉後整數溢位那麼就...

LeetCode 第七題 整數反轉

整數反轉 難度 簡單 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321示例 2 輸入 123 輸出 321示例 3 輸入 120 輸出 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這...