Skip to content
Leetcode
Esc
↑↓navigate↵open⌘Jpreview
On this page

150. Evaluate Reverse Polish Notation

You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation

Array

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].

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]

Explanation

Last updated on September 24, 2026

Was this page helpful?