leetcode 7 整數反轉 8 字元串轉換整數 (atoi)
7. 整數反轉
難度簡單2807收藏分享切換為英文接收動态回報
給你一個 32 位的有符号整數
x
,傳回将
x
中的數字部分反轉後的結果。
如果反轉後整數超過 32 位的有符号整數的範圍
[−231, 231 − 1]
,就傳回 0。
假設環境不允許存儲 64 位整數(有符号或無符号)。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
提示:
-
-231 <= x <= 231 - 1
class Solution:
def reverse(self, x: int) -> int:
a,b = 2 ** 31,0
if x < 0:
b = -int(str(-x)[::-1])
else:
b = int(str(x)[::-1])
if b < -a or b > a - 1:
return 0
return b
"""
第二種
"""
def reverse2(self, x: int) -> int:
m = 2 ** 31
flag = False
if x < 10 and x > -10:
return x
if x < 0:
x = -x
flag = True
a = x
r = ""
for i in range(32):
s = a % 10
a//=10
if i == 0 and s == 0:
continue
r += str(s)
if a == 0:
break
r = -int(r) if flag else int(r)
if r < -m or r > m - 1:
return 0
return r
if __name__ == '__main__':
b = -123405670
print(Solution().reverse(b))
8. 字元串轉換整數 (atoi)
難度中等1112收藏分享切換為英文接收動态回報
請你來實作一個
myAtoi(string s)
函數,使其能将字元串轉換成一個 32 位有符号整數(類似 C/C++ 中的
atoi
函數)。
函數
myAtoi(string s)
的算法如下:
- 讀入字元串并丢棄無用的前導空格
- 檢查下一個字元(假設還未到字元末尾)為正還是負号,讀取該字元(如果有)。 确定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。
- 讀入下一個字元,直到到達下一個非數字字元或到達輸入的結尾。字元串的其餘部分将被忽略。
- 将前面步驟讀入的這些數字轉換為整數(即,“123” -> 123, “0032” -> 32)。如果沒有讀入數字,則整數為 。必要時更改符号(從步驟 2 開始)。
- 如果整數數超過 32 位有符号整數範圍
,需要截斷這個整數,使其保持在這個範圍内。具體來說,小于[−231, 231 − 1]
的整數應該被固定為−231
,大于−231
的整數應該被固定為231 − 1
。231 − 1
- 傳回整數作為最終結果。
注意:
- 本題中的空白字元隻包括空格字元
。' '
- 除前導空格或數字後的其餘字元串外,請勿忽略 任何其他字元。
示例 1:
輸入:s = "42"
輸出:42
解釋:加粗的字元串為已經讀入的字元,插入符号是目前讀取的字元。
第 1 步:"42"(目前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"42"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"42"(讀入 "42")
^
解析得到整數 42 。
由于 "42" 在範圍 [-231, 231 - 1] 内,最終結果為 42 。
示例 2:
輸入:s = " -42"
輸出:-42
解釋:
第 1 步:" -42"(讀入前導空格,但忽視掉)
^
第 2 步:" -42"(讀入 '-' 字元,是以結果應該是負數)
^
第 3 步:" -42"(讀入 "42")
^
解析得到整數 -42 。
由于 "-42" 在範圍 [-231, 231 - 1] 内,最終結果為 -42 。
示例 3:
輸入:s = "4193 with words"
輸出:4193
解釋:
第 1 步:"4193 with words"(目前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"4193 with words"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"4193 with words"(讀入 "4193";由于下一個字元不是一個數字,是以讀入停止)
^
解析得到整數 4193 。
由于 "4193" 在範圍 [-231, 231 - 1] 内,最終結果為 4193 。
示例 4:
輸入:s = "words and 987"
輸出:0
解釋:
第 1 步:"words and 987"(目前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"words and 987"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"words and 987"(由于目前字元 'w' 不是一個數字,是以讀入停止)
^
解析得到整數 0 ,因為沒有讀入任何數字。
由于 0 在範圍 [-231, 231 - 1] 内,最終結果為 0 。
示例 5:
輸入:s = "-91283472332"
輸出:-2147483648
解釋:
第 1 步:"-91283472332"(目前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"-91283472332"(讀入 '-' 字元,是以結果應該是負數)
^
第 3 步:"-91283472332"(讀入 "91283472332")
^
解析得到整數 -91283472332 。
由于 -91283472332 小于範圍 [-231, 231 - 1] 的下界,最終結果被截斷為 -231 = -2147483648 。
提示:
-
0 <= s.length <= 200
-
由英文字母(大寫和小寫)、數字(s
)、0-9
、' '
、'+'
和'-'
組成'.'
class Solution:
def myAtoi(self, s: str) -> int:
max_int = 0x7fffffff
min_int = 0x80000000
i = 0
flag = 1
res = 0
while i < len(s) and s[i] == " ":
i+=1
if i < len(s) and (s[i] == "+" or s[i] == "-"):
if s[i] == "-":
flag = -1
i += 1
while i < len(s) and s[i].isdigit():
res = res*10 + int(s[i])
if flag == 1 and res > max_int:
return max_int
if flag == -1 and res > min_int:
return -min_int
i+=1
return res*flag
if __name__ == '__main__':
s = "-91283472332"
print(Solution().myAtoi(s))