力扣日記 008 字串轉換整數

2021-09-29 13:57:20 字數 2133 閱讀 7116

請你來實現乙個 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 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下 如果第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字字元組合起來,形成乙個有符號整數。假如第乙個非空字元是數字,則直接將其與...