150. Evaluate Reverse Polish Notation

150. Evaluate Reverse Polish Notation

這個題目是屬於如何使用 Stack 來紀錄處理四則運算的方法。Wiki:逆波蘭表示法,在逆波蘭記法中,所有運算子置於運算元的後面,因此也被稱為字尾表示法後序表示法。逆波蘭記法不需要括號來標識運算子的優先級。

逆波蘭表達式的直譯器一般是基於堆疊的。解釋過程一般是:運算元入棧;遇到運算子時,運算元出棧,求值,將結果入棧;當一遍後,棧頂就是表達式的值。因此逆波蘭表達式的求值使用堆疊結構很容易實現,並且能很快求值。

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []

        for token in tokens:
            if token in "+-*/":
                a = stack.pop()
                b = stack.pop()
                if token == '+':
                    stack.append(a + b)
                elif token == '*':
                    stack.append(a * b)
                elif token == "-":
                    stack.append(b - a)
                elif token == '/':
                    stack.append(int(b/a))
            else:
                stack.append(int(token))
        return stack.pop()

時間複雜度為 O(n)

空間複雜度為 O(n)