# 150 Evaluate Reverse Polish Notation

## Problem Statement

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.

Input: tokens = ["2","1","+","3","*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9

## Approach

The following points are very important:

• The division between two integers always truncates toward zero.
• There will not be any division by zero.
This means that 3 / 2 is 1 and not 1.5.
From there we use a stack to come to a solution.

## Solution

``````var evalRPN = function(tokens) {
let stack = []

for (const t of tokens) {
const isOperator = t === '+' || t === '-' || t === '*' || t === '/'
if (isOperator) {
const v2 = stack.pop()
const v1 = stack.pop()
let v3
switch (t) {
case "+": v3 = v1 + v2; break;
case "-": v3 = v1 - v2; break;
case "*": v3 = v1 * v2; break;
case "/":
if (v2 === 0) {
throw new Error("Division by zero");
}
v3 = Math.trunc(v1 / v2);
break;
}
stack.push(v3)
continue
} else {
stack.push(+t)
}
}

return stack.pop()
};
``````

LC

Stack