1 題目描述


題目中是逆波蘭式,計算法則就是,每次找到運算子位置的前兩個數字,然後再進行計算。

2 解法

這題不會太難,我覺得關鍵在你要意識到,當計算完後,要把結果再 push 回去 stack 裡面,這樣下次遇到運算符號時,才可以再次的把上一次的計算結果一起pop出來。

以範例的 ["4","13","5","/","+"] 為例好了,大概是這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
operators = ["+", "-", "*", "/"]
for i in tokens:
cur = i
if cur not in operators:
stack.append(int(cur))
else:
pre = stack.pop()
top = stack.pop()
if cur == "+":
stack.append(top + pre)
elif cur == "-":
stack.append(top - pre)
elif cur == "*":
stack.append(top * pre)
elif cur == "/":
stack.append(int(top / pre))
return stack[0]

3 總結

這題的解題關鍵就是當計算完後,要把結果再 push 回去 stack 裡面,這樣下次遇到運算符號時,才可以再次的把上一次的計算結果一起pop出來。一開始我沒想到,一直花時間在想要怎麼儲存運算完後的結果,只是想著要存在某個變數,後來休息一下,再回頭看,腦子清晰了,就想到了可以塞回去stack呀!!