leetcode演算法第8題

2021-10-20 12:32:50 字數 3046 閱讀 5054

請你來實現乙個 myatoi(string s) 函式,使其能將字串轉換成乙個 32 位有符號整數(類似 c/c++ 中的 atoi 函式)。

函式 myatoi(string s) 的演算法如下:

讀入字串並丟棄無用的前導空格

檢查下乙個字元(假設還未到字元末尾)為正還是負號,讀取該字元(如果有)。 確定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。

讀入下乙個字元,直到到達下乙個非數字字元或到達輸入的結尾。字串的其餘部分將被忽略。

將前面步驟讀入的這些數字轉換為整數(即,「123」 -> 123, 「0032」 -> 32)。如果沒有讀入數字,則整數為 0 。必要時更改符號(從步驟 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 。

class

solution

:def

myatoi

(self, s:

str)

->

int:

x ="" j =

0 s+=

"cc"

label=

"1234567890"

for i in s:

if i in label and s[j+1]

notin label:

return self.get_l(x+i)

if i in

" +-1234567890"

:if i ==

" ":

if s[j+1]

==" "

: x += i

elif s[j+1]

=="+"

or s[j+1]

=="-"

:if s[j+2]

in label:

x+=i

else

:return

0elif s[j+1]

in label:

x+=i

elif i==

"+"or i==

"-":

if s[j+1]

in label:

x+=i

else

:return

0elif i in label:

x+=i

else

:return

0 j+=

1return self.get_l(x)

defget_l

(self, x)

: x =

int(x)if-

2**3131-1:

return x

elif x>0:

return2**

31-1else

:return-2

**31

leetcode演算法第7題

給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 示例 1 輸入 x 123 輸出 321 示例 2 輸入 x 123 輸出 321 示例 3 輸...

leetcode演算法第9題

給你乙個整數 x 如果 x 是乙個回文整數,返回 true 否則,返回 false 回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。例如,121 是回文,而 123 不是。示例 1 輸入 x 121 輸出 true 示例 2 輸入 x 121 輸出 false 解釋 從左向右讀,為 1...

演算法第8章習題 8 13題

a 這個問題是屬於 p 的,解法如下 選取任意乙個v l 中的頂點s,以s為根節點進行深度優先搜尋,每當訪問到l中的頂點時,就停止向下擴充套件,使得l中的頂點成為葉節點。如果深度優先搜尋完成後,所有頂點都已經被訪問到,這顆生成樹即是滿足條件的。否則就說明這樣的生成樹不存在。b 是 np 完全的,因為...