Skip to main content
Back to problems
#150
Medium Algorithms

Evaluate reverse polish notation

Array Math Stack
57.1% acceptance
Jan 12, 2026
8644
1181
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.

Solution

Rust
Time O(n)
Space O(n)
LeetCode
solution.rs
impl Solution {
  pub fn eval_rpn(tokens: Vec<String>) -> i32 {
    let mut stack: Vec<i32> = Vec::new();
    
    for token in tokens {
      match token.as_str() {
        "+" => {
          let b = stack.pop().unwrap();
          let a = stack.pop().unwrap();
          stack.push(a + b);
        }
        "-" => {
          let b = stack.pop().unwrap();
          let a = stack.pop().unwrap();
          stack.push(a - b);
        }
        "*" => {
          let b = stack.pop().unwrap();
          let a = stack.pop().unwrap();
          stack.push(a * b);
        }
        "/" => {
          let b = stack.pop().unwrap();
          let a = stack.pop().unwrap();
          stack.push(a / b);
        }
        _ => {
          stack.push(token.parse::<i32>().unwrap());
        }
      }
    }
    
    stack[0]
  }
}