計算逆波蘭表示法 | Medium | LeetCode#150. Evaluate Reverse Polish Notation
題目敘述
- 題目難度:
Easy
- 題目描述: 本題要求給定一個字串陣列
tokens
,當中是以 逆波蘭表示法 的算式運算式,需要回傳算術運算的結果,結果為整數型態。
注意:
- 有效的運算子只會有:
+
,-
,*
,/
。 - Operand 都會是整數
- 除法採無條件捨去法
- 不可除以0
- 中間運算的數字會是 32-bit 整數
解法
一開始的想法
如果看上面的範例 ["4","13","5","/","+"]
,可以看出,如果碰到operator,碰到operator前的兩個數字就會透過該operator進行運算。
因此我的想法是:
- 建立一個stack
- 迭代
tokens
若遇到數字就push進stack - 若遇到運算子,則將兩個元素pop出來進行四則運算
- 運算結果丟回 stack
- 迭代完畢後回傳 stacK 頂端元素
我的解法
1 | class Solution { |
說明
- 這裡宣告的 stack 是
int
type 的,所以在push的時候要注意 type的轉換,這裡用當中的 stoi
函數將字串轉換成整數。 - 另外還要注意,pop出來的第一個元素會是在operator後面,也就是如過現在是除法,那要pop出來的元素就會是分子,所以順序要注意
執行結果
複雜度
時間複雜度
時間複雜度:$O(n)$,其中 n 是輸入tokens的數量。
空間複雜度
空間複雜度:$O(n)$,其中 n 是輸入tokens的數量。
結語
這次紙上先寫出演算法大概花7分鐘,實際寫大概20min AC,還是有待加強。
Note: 字串轉數字:
stoi()
,數字轉字串:to_string()
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Kevin Liu's 部落格 || Technical || Travel!
評論