All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0101_0200.s0150_evaluate_reverse_polish_notation.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0101_0200.s0150_evaluate_reverse_polish_notation;

// #Medium #Top_Interview_Questions #Array #Math #Stack #Programming_Skills_II_Day_3
// #2022_06_24_Time_9_ms_(51.23%)_Space_44.1_MB_(56.86%)

import java.util.Stack;

/**
 * 150 - Evaluate Reverse Polish Notation\.
 *
 * Medium
 *
 * Evaluate the value of an arithmetic expression in [Reverse Polish Notation](http://en.wikipedia.org/wiki/Reverse_Polish_notation).
 *
 * Valid operators are `+`, `-`, `*`, and `/`. Each operand may be an integer or another expression.
 *
 * **Note** that division between two integers should truncate toward zero.
 *
 * It is guaranteed that the given RPN expression is always valid. That means the expression would always evaluate to a result, and there will not be any division by zero operation.
 *
 * **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 <= 104
 * *   `tokens[i]` is either an operator: `"+"`, `"-"`, `"*"`, or `"/"`, or an integer in the range `[-200, 200]`.
**/
@SuppressWarnings("java:S1149")
public class Solution {
    public int evalRPN(String[] tokens) {
        Stack st = new Stack<>();
        for (String token : tokens) {
            if (!Character.isDigit(token.charAt(token.length() - 1))) {
                st.push(eval(st.pop(), st.pop(), token));
            } else {
                st.push(Integer.parseInt(token));
            }
        }
        return st.pop();
    }

    private int eval(int second, int first, String operator) {
        switch (operator) {
            case "+":
                return first + second;
            case "-":
                return first - second;
            case "*":
                return first * second;
            default:
                return first / second;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy