Q: 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.
A: I can use a stack to solve this problem. When the element is a number, I will push it into the stack. When the element is an operator(+-*/), I will pop two number from stack and calculate it, push result into stack.
public int evalRPN(String[] tokens) {
Stack stack = new Stack();
int a, b;
for(String c: tokens){
switch(c){
case "+":
a = (int)stack.pop();
b = (int)stack.pop();
stack.push(a+b);
break;
case "-":
a = (int)stack.pop();
b = (int)stack.pop();
stack.push(b-a);
break;
case "*":
a = (int)stack.pop();
b = (int)stack.pop();
stack.push(a*b);
break;
case "/":
a = (int)stack.pop();
b = (int)stack.pop();
stack.push(b/a);
break;
default: stack.push(Integer.parseInt(c));
}
}
return (int)stack.peek();
}