題目:給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [−231, 231 − 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
審題的關鍵點有幾個,一個是這個給的數值正整數和負整數都有可能,范圍是 [−2**31, 2**31 − 1],主要是這三個點,這里我想到的解決方案是轉化成字符串,再轉換成int型。
偽代碼:
- 把傳入的值直接轉成字符串
- 把拿到的字符串判斷是正整數,還是負整數
- 負整數取值,直接從第二位開始取值,然后反轉
- 最后返回時,根據前面轉換后的值,判斷在不在 [−2**31, 2**31 − 1]
import math def reverse(x: int): str_x = str(x) if str_x[0] == '-': x = int("-" + (str_x[1::])[::-1]) else: x = int(str_x[::-1]) return x if math.pow(-2, 31) < x < math.pow(2, 31) - 1 else 0 if __name__ == "__main__": print(reverse(-9))