Evaluate Reverse Polish Notation
# 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.
# Ex1:
# Input: tokens = ["2","1","+","3","*"]
# Output: 9
# Explanation: ((2 + 1) * 3) = 9
# Ex2:
# Input: tokens = ["4","13","5","/","+"]
# Output: 6
# Explanation: (4 + (13 / 5)) = 6
# Ex3:
# 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
from collections import deque
def isOperator(str):
return str == '+' or str == '-' or str == '*' or str == '/'
def evalRPN(tokens):
if len(tokens) == 0:
return 0
st = deque()
for t in tokens:
if isOperator(t) == False:
st.append(int(t))
continue
n2 = st.pop()
n1 = st.pop()
if t == '+':
st.append(n1+n2)
elif t == '-':
st.append(n1-n2)
elif t == '*':
st.append(n1*n2)
elif t == '/':
st.append(int(n1/n2))
return st.pop()
def main():
tokens = ["2","1","+","3","*"]
assert evalRPN(tokens) == 9
tokens = ["4","13","5","/","+"]
assert evalRPN(tokens) == 6
tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
assert evalRPN(tokens) == 22
if __name__ == "__main__":
main()```
https://leetcode.com/problems/evaluate-reverse-polish-notation/
Last updated