150. Evaluate Reverse Polish Notation
You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation
ArrayExample 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^4tokens[i]is either an operator: “+”, “-”, “*”, or “/”, or an integer in the range [-200, 200].
Approach
Solution
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]