請你來實現乙個 atoi 函式,使其能將字串轉換成整數。
首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。
當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號;假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。
該字串除了有效的整數部分之後也可能會存在多餘的字元,這些字元可以被忽略,它們對於函式不應該造成影響。
注意:假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換。
在任何情況下,若函式不能進行有效的轉換時,請返回 0。
說明:假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 [−231, 231 − 1]。如果數值超過這個範圍,請返回 int_max (231 − 1) 或 int_min (−231) 。
class
solution
:def
myatoi
(self, s:
str)
->
int:
return
max(
min(
int(
*re.findall(
'^[\+\-]?\d+'
, s.lstrip())
),2**
31-1)
,-2**
31)
'^[\+\-]?\d+'
是正規表示式,^表示匹配,?表示括號內容重複0次或一次,\d匹配數字,+表示\d重複1到無數次。
s.lstrip()
表示將字串左邊的空格去掉。
*re.findall()
*將函式返回的元組解包
max(min(x,2**31-1),-2**31)
用來控制輸出邊界。
現在是2020-04-03 周五 晴。刷四月的力扣每日精選,又見到了這道題,事實是我忘了用簡潔的正規表示式了,但是用常規思想也很容易解決這道題。
class
solution
:def
myatoi
(self,
str:
str)
->
int:
s=str.lstrip(
)try
:# if s[0] not in :return 0
# if s[0]=='-':
k=s[0]
for i in s[1:
]:if i notin:
break
k+=i
# if k=='+':return 0
k=int(k)
if k>2**
31-1:
return2**
31-1if k<-2
**31
:return-2
**31
return k
except
:return
0
本來對特例什麼的做了複雜的判斷,但是不斷修改新增特例的過程中,我意識到,錯誤是千奇百怪的,但是正確的模式只有一種,所以:
利用try-except來判斷,所有不滿足正確模式的都引發錯誤判斷即可。
class
solution
:def
myatoi
(self,
str:
str)
->
int:
s=str.lstrip(
)try
: k=s[0]
for i in s[1:
]:if i notin:
break
k+=i
return
min(
max(
int(k),-
2**31)
,2**31-1
)except
:return
0
執行用時 :40 ms, 在所有 python3 提交中擊敗了70.16%的使用者
力扣 8 字串轉換整數
去掉左邊空字元 str str.lstrip 如果字串為空,返回0 if len str 0 return 0 設定預設輸出為0 last 0 如果有符號設定起始位置2,其餘的為1 if str 0 or str 0 i 2 else i 1 直到無法強制轉換為整數,跳出迴圈 while i len...
力扣 8 字串轉換整數 atoi
一 題目描述 請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之...
力扣 8 字串轉換整數 atoi
請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下 如果第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字字元組合起來,形成乙個有符號整數。假如第乙個非空字元是數字,則直接將其與...