1. 整數反轉
題目連結:https://leetcode.cn/problems/reverse-integer/
給定一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉後的結果。
如果反轉後整數超過 32 位的有符號整數的範圍 [−2^31, 2^31 − 1] ,就返回 0。
class Solution:
def reverse(self, x: int) -> int:
sign = 1 if x >= 0 else -1
x = abs(x)
reversed_x = 0
while x > 0:
reversed_x = reversed_x * 10 + x % 10
x //= 10
reversed_x *= sign
if reversed_x < -2**31 or reversed_x > 2**31 - 1:
return 0
return reversed_x
2. 字串轉換整數
題目連結:https://leetcode.cn/problems/string-to-integer-atoi/
請實現一個 myAtoi(string s) 函式,使其能將字串轉換成一個 32 位有符號整數。
函式 myAtoi(string s) 的演算法如下:
空格:讀入字串並丟棄無用的前導空格(" ")
符號:檢查下一個字元(假設還未到字元末尾)為 '-' 還是 '+'。如果兩者都不存在,則假定結果為正。
轉換:透過跳過前置零來讀取該整數,直到遇到非數字字元或到達字串的結尾。如果沒有讀取數字,則結果為0。
舍入:如果整數數超過 32 位有符號整數範圍 [−2^31, 2^31 − 1] ,需要截斷這個整數,使其保持在這個範圍內。具體來說,小於 −2^31 的整數應該被舍入為 −2^31 ,大於 2^31 − 1 的整數應該被舍入為 2^31 − 1 。
返回整數作為最終結果。
class Solution:
def myAtoi(self, s: str) -> int:
s = s.strip()
sign = 1
if s and (s[0] == '-' or s[0] == '+'):
if s[0] == '-':
sign = -1
s = s[1:]
num = 0
for c in s:
if c.isdigit():
num = num * 10 + int(c)
else:
break
num *= sign
if num < -2**31:
return -2**31
elif num > 2**31 - 1:
return 2**31 - 1
return num