Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
在反向波动表示法中评估算术表达式的值。
有效的运算符是+, - ,*,/。 每个操作数可能是一个整数或另一个表达式。
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 k = num.pop();
int j = num.pop();
if(operate.element().equals("+")){
num.push(k + j);
}else if(operate.element().equals("-")){
num.push(j - k);
}else if(operate.element().equals("*")){
num.push(k * j);
}else{
num.push(j / k);
}
//出队列
operate.remove();
}
}else{
num.push(Integer.parseInt(tokens[i]));
}
}
return num.pop();
}
}