g0101_0200.s0150_evaluate_reverse_polish_notation.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
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