leetcode 150 逆波蘭表示式求值

2021-09-22 23:00:32 字數 1905 閱讀 9914

150. 逆波蘭表示式求值

根據逆波蘭表示法,求表示式的值。

有效的運算子包括+,-,*,/。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。

輸入: ["2", "1", "+", "3", "*"]

輸出: 9

解釋: ((2 + 1) * 3) = 9

【資料結構】波蘭式、逆波蘭式與表示式求值

簡單來說,平時我們的運算是中綴表示式,對著應二叉樹的中序遍歷,而逆波蘭表示式對應著二叉樹的後序遍歷,波蘭式對應先序遍歷。

由字首表示式求出結果十分方便,只需要用乙個棧實現:

我們可以用乙個棧s2來實現計算,掃瞄從左往右進行,如果掃瞄到運算元,則壓進s2,如果掃瞄到操作符,則從s2彈出兩個運算元。進行相應的操作,並將結果壓進s2(s2的個數出2個進1個),當掃瞄結束後,s2的棧頂就是表示式結果。字尾表示式和字首表示式看起來就像一對逆過程,實際上並不是這樣子,因為字元讀取的時候都是從左往右的,所以,字首表示式往往需要用兩個棧來計算,其中乙個棧用來預處理:將字串倒序壓進棧中。

class solution:

def evalrpn(self, tokens) :

"""用乙個棧s2來實現計算,掃瞄從左往右進行,如果掃瞄到運算元,則壓進s2,

如果掃瞄到操作符,則從s2彈出兩個運算元。進行相應的操作,並將結果壓進s2(s2的個數出2個進1個),

當掃瞄結束後,s2的棧頂就是表示式結果。

"""stack =

for c in tokens:

if c.isdigit() or ('-' in c and len(c)>1):

else:

# 注意除數與被除數 [0,3,/]

b,a = stack.pop(),stack.pop() # list中彈出最後乙個

if c == '+':

elif c == '-':

elif c == '*':

elif c == '/':

return stack[0]

if __name__ == '__main__':

tokens = ["2", "1", "+", "3", "*"]

a = "-88" # print(a.isdigit()) # false

b = "88" #print(b.isdigit()) # true

print(3/2) # 1.5

print(int(3/2)) # 1

print(solution().evalrpn(tokens))

注意main中的一些區別,和除數與被除數的關係。

str.isdigit()注意是str型別。

leetcode 150:逆波蘭表示式求值(最詳細解決方案!!!)這種感覺也不錯~

class solution:

def evalrpn(self, tokens):

""":type tokens: list[str]

:rtype: int

"""stack = list()

oper = ['+', '-', '*', '/']

for char in tokens:

if char not in oper:

else:

top1 = stack.pop()

top2 = stack.pop()

if char == '+':

elif char == '-':

elif char == '*':

elif char == '/':

return stack.pop()

LeetCode 150 逆波蘭表示式

根據 逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分。給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。示例 1 輸入 2 1 3 輸出 9 解釋 該算式轉化為常見的中綴算術表示式為...

leetcode 150 逆波蘭表示式求值

根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 示例 1 輸入 2 1 3 輸出 9 解釋 2 1 3 9示例 2 輸入 4 13 5 輸出 6 解釋 4 13 5 6從前往後遍歷陣列,遇到數字則壓入棧中,遇到符號,則把棧頂的兩個數字拿出來...

LeetCode 150 逆波蘭表示式求值

根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分。給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。示例 1 輸入 2 1 3 輸出 9 解釋 2 1 3 9 示例 2 輸入 4 ...