計算逆波蘭表示法 | 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 是
inttype 的,所以在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!
評論










