--- title: '150. Evaluate Reverse Polish Notation' description: You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation sidebar: label: 'Evaluate Reverse Polish Notation' badge: 'Medium' --- Stack ### Example 1: - Input: `tokens = ["2","1","+","3","*"]` - Output: `9` - Explanation: `((2 + 1`) * `3`) = `9` ### Example 2: - Input: `tokens = ["4","13","5","/","+"]` - Output: `6` - Explanation: `(4 + (13 / 5`)) = `6` ### Example 3: - Input: `tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]` - Output: `22` - Explanation: `((10 * (6 / ((9 + 3`) * `-11`))) + `17`) + `5 = ((10 * (6 / (12 * -11`))) + `17`) + `5 = ((10 * (6 / -132`)) + `17`) + `5 = ((10 * 0`) + `17`) + `5 = (0 + 17`) + `5 = 17 + 5 = 22` ### Constraints: - `1 <= tokens.length <= 10^4` - `tokens[i]` is either an operator: "+", "-", "*", or "/", or an integer in the range [-200, 200]. ## Solution ```py class Solution: def evalRPN(self, tokens: List[str]) -> int: stack = [] operations = { "+": lambda x, y: int(x + y), "-": lambda x, y: int(x - y), "*": lambda x, y: int(x * y), "/": lambda x, y: int(x / y), } for c in tokens: if c in operations: y = stack.pop() x = stack.pop() calc_func = operations[c] result = calc_func(x, y) stack.append(result) else: stack.append(int(c)) return stack[0] ```