Evaluate Reverse Polish Notation
Problem
https://leetcode.com/problems/evaluate-reverse-polish-notation/
You are given an array of strings tokens that represents an
arithmetic expression in a Reverse Polish
Notation.
Evaluate the expression. Return an integer that represents the value of the expression.
Note that:
The valid operators are
'+','-','*', and'/'.Each operand may be an integer or another expression.
The division between two integers always truncates toward zero.
There will not be any division by zero.
The input represents a valid arithmetic expression in a reverse polish notation.
The answer and all the intermediate calculations can be represented in a 32-bit integer.
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:sup:`4`tokens[i]is either an operator:"+","-","*", or"/", or an integer in the range[-200, 200].
Pattern
Array, Math, Stack
Approaches
Code
from collections import deque
def exec_op(x, y, op_token):
match op_token:
case "+":
return x + y
case "-":
return x - y
case "*":
return x * y
case "/":
return int(float(x) / y)
def evalRPN(tokens: list[str]) -> int:
num_stack = deque()
operators = {"+", "-", "*", "/"}
for token in tokens:
if token in operators:
y = num_stack.pop()
x = num_stack.pop()
result = exec_op(x, y, token)
num_stack.append(result)
else:
num_stack.append(int(token))
return num_stack.pop()
Test
>>> from evaluate_reverse_polish_notation__stack import evalRPN
>>> evalRPN(["2", "1", "+", "3", "*"])
9
>>> evalRPN(["4", "13", "5", "/", "+"])
6
>>> evalRPN(["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"])
22
- evaluate_reverse_polish_notation__stack.exec_op(x, y, op_token)
- evaluate_reverse_polish_notation__stack.evalRPN(tokens: list[str]) int