Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
package cc.stack.application;
import java.util.Stack;
class Solution {
public int evalRPN(String[] tokens) {
if(tokens == null || tokens.length == 0)
return 0;
Stack<Integer> stack = new Stack<Integer>();
for(int i=0; i<tokens.length; i++) {
if(tokens[i].matches("\\d+") || tokens[i].matches("-\\d+"))
stack.push(Integer.valueOf(tokens[i]));
else if(tokens[i].equals("+") || tokens[i].equals("-")
|| tokens[i].equals("*") || tokens[i].equals("/")) {
int stack_a = 0;
int stack_b = 0;
int c = 0;
if(!stack.isEmpty()) {
stack_a = stack.pop();
} else {
return 0;
}
if(!stack.isEmpty()) {
stack_b = stack.pop();
} else {
return 0;
}
if(tokens[i].equals("+"))
c = stack_b + stack_a;
else if(tokens[i].equals("-"))
c = stack_b - stack_a;
else if(tokens[i].equals("*"))
c = stack_b * stack_a;
else if(tokens[i].equals("/"))
c = stack_b / stack_a;
stack.push(c);
}
}
if(!stack.empty())
return stack.pop();
else
return 0;
}
}
public class Main1 {
public static void main(String[] args) {
Solution s = new Solution();
String[] tokens = {"18"};
System.out.println(s.evalRPN(tokens));
}
}