给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
- 有效的算符为
'+'、'-'、'*'和'/'。 - 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
- 两个整数之间的除法总是 向零截断 。
- 表达式中不含除零运算。
- 输入是一个根据逆波兰表示法表示的算术表达式。
- 答案及所有中间计算结果可以用 32 位 整数表示。
示例 1:
输入: tokens = ["2","1","+","3","*"]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
示例 2:
输入: tokens = ["4","13","5","/","+"]
输出: 6
解释: 该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
public int evalRPN(String[] tokens){
//先有两个操作数,再有运算符,典型的后进先出
Deque<Integer> stack = new LinkedList<>();
int res = 0;
for(String str : tokens){
if (isDigital(str)){
stack.push(Integer.parseInt(str));
}else if ("+".equals(str)){
Integer i1 = stack.pop();
Integer i2 = stack.pop();
stack.push(i1 + i2);
}else if ("*".equals(str)){
Integer i1 = stack.pop();
Integer i2 = stack.pop();
stack.push(i1 * i2);
}else if ("-".equals(str)){
Integer i1 = stack.pop();
Integer i2 = stack.pop();
stack.push(i2 - i1);
}else if ("/".equals(str)){
Integer i1 = stack.pop();
Integer i2 = stack.pop();
stack.push(i2 / i1);
}
}
return stack.pop();
}