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
评估反向波兰符号中算术表达式的值。
有效运算符为+、-、*、/。每个操作数可以是整数或其他表达式。
import java.util.*;
public class Solution {
public int evalRPN(String[] tokens) {
//使用栈存储操作数
Stack<Integer> num = new Stack<Integer>();
//使用队列存储操作符号
Queue<String> operate = new LinkedList<String>();
if(tokens == null || tokens.length == 0){
return 0;
}
for(int i=0;i<tokens.length;i++){
if(tokens[i].equals("*") || tokens[i].equals("+")
||tokens[i].equals("-") || tokens[i].equals("/")){
//操作符号入队
operate.offer(tokens[i]);
while(!operate.isEmpty()){
int j=num.pop();
int k=num.pop();
if(operate.element().equals("+")){
num.push(k + j);
}else if(operate.element().equals("-")){
num.push(k - j);
}else if(operate.element().equals("*")){
num.push(k * j);
}else{
num.push(k / j);
}
//操作数出队
operate.poll();
}
}else{
num.push(Integer.parseInt(tokens[i]));
}
}
return num.pop();
}
}