題目描述
請你來實現(xiàn)一個 atoi 函數(shù),使其能將字符串轉(zhuǎn)換成整數(shù)。
首先,該函數(shù)會根據(jù)需要丟棄無用的開頭空格字符,直到尋找到第一個非空格的字符為止。
當我們尋找到的第一個非空字符為正或者負號時,則將該符號與之后面盡可能多的連續(xù)數(shù)字組合起來,作為該整數(shù)的正負號;假如第一個非空字符是數(shù)字,則直接將其與之后連續(xù)的數(shù)字字符組合起來,形成整數(shù)。
該字符串除了有效的整數(shù)部分之后也可能會存在多余的字符,這些字符可以被忽略,它們對于函數(shù)不應該造成影響。
注意:假如該字符串中的第一個非空格字符不是一個有效整數(shù)字符、字符串為空或字符串僅包含空白字符時,則你的函數(shù)不需要進行轉(zhuǎn)換。
在任何情況下,若函數(shù)不能進行有效的轉(zhuǎn)換時,請返回 0。
說明:
假設我們的環(huán)境只能存儲 32 位大小的有符號整數(shù),那么其數(shù)值范圍為 [?231, 231 ? 1]。如果數(shù)值超過這個范圍,qing返回 INT_MAX (231 ? 1) 或 INT_MIN (?231) 。
示例 1:
輸入: "42"
輸出: 42
示例 2:
輸入: " -42"
輸出: -42
解釋: 第一個非空白字符為 '-', 它是一個負號。
我們盡可能將負號與后面所有連續(xù)出現(xiàn)的數(shù)字組合起來,最后得到 -42 。
示例 3:
輸入: "4193 with words"
輸出: 4193
解釋: 轉(zhuǎn)換截止于數(shù)字 '3' ,因為它的下一個字符不為數(shù)字。
示例 4:
輸入: "words and 987"
輸出: 0
解釋: 第一個非空字符是 'w', 但它不是數(shù)字或正、負號。
因此無法執(zhí)行有效的轉(zhuǎn)換。
示例 5:
輸入: "-91283472332"
輸出: -2147483648 [Add to Citavi project by ISBN]
解釋: 數(shù)字 "-91283472332" 超過 32 位有符號整數(shù)范圍。
因此返回 INT_MIN (?231) 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/string-to-integer-atoi
著作權(quán)歸領(lǐng)扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
解題思路
沒有思路 按照題意 全是if else 臉紅
def myAtoi(self, str: str) -> int:
result = ""
negative = 1
label = 0
if str == "":
return 0
for i in str:
if i == " " :
if result == "":
continue
else:
break
elif i=="-":
if label == 0 and result == "":
label = 1
negative = -1
result += "-"
else:
break
elif i=="+":
if label == 0 and result == "":
label =1
negative = 1
result += "+"
else:
break
elif i in "1234567890":
result +=i
elif result !="" :
break
else :
return 0
try:
I = int(result)
except :
return 0
t= pow(2,31)
if I < -1*t :
return -1*t
elif I>t-1:
return t-1
else:
return I

改進
可以先用 strip() 函數(shù) 使空格切割 字符
其他解法
class Solution:
def myAtoi(self, s: str) -> int:
return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)
使用正則表達式:
^:匹配字符串開頭
[+-]:代表一個+字符或-字符
?:前面一個字符可有可無
\d:一個數(shù)字
+:前面一個字符的一個或多個
\D:一個非數(shù)字字符
*:前面一個字符的0個或多個
max(min(數(shù)字, 231 - 1), -231) 用來防止結(jié)果越界
為什么可以使用正則表達式?如果整數(shù)過大溢出怎么辦?
題目中描述: 假設我們的環(huán)境只能存儲 32 位大小的有符號整數(shù)
首先,這個假設對于 Python 不成立,Python 不存在 32 位的 int 類型。其次,即使搜索到的字符串轉(zhuǎn)32位整數(shù)可能導致溢出,我們也可以直接通過字符串判斷是否存在溢出的情況(比如 try 函數(shù) 或 判斷字符串長度 + 字符串比較),聰明的你應該會解決這個問題吧?
作者:QQqun902025048
鏈接:https://leetcode-cn.com/problems/two-sum/solution/python-1xing-zheng-ze-biao-da-shi-by-knifezhu/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。