题目描述:
Calculate the value of inverse Polish (postfix expression)
The operator only contains " +", “-”, “*” and “/”, the operand may be an integer or other expressions
计算逆波兰式(后缀表达式)的值运算符仅包含"+","-“和”/".被操作数可能是整数或其他表达式
例如:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
示例:
输入:
[“2”,“1”,"+",“3”,"*"]
输出:
9
思路分析:像这种求解逆波兰表达式的首先想到的就是栈这种数据结构,对输入的表达式进行一个个字符的扫描遍历,用一个Integer类型的栈来存储表达式中的数字以及每一次运算的结果。当扫描的字符是不是运算符即为数字时先转为Integer型再进行入栈操作,当扫描的字符是运算符时,从栈内依次弹出两个栈顶元素作为运算的数字,并按对应的运算符进行运算。将运算结果入栈,最后栈内剩下的那个数值就是运算结果。
import java.util.*;
import java.util.Stack;
public class Solution {
public int evalRPN (String[] tokens){
Stack<Integer> stack = new Stack<>();
int op1=0;
int op2=0;
for(String s:tokens){
switch(s){
case "+":
op2=stack.pop();
op1=stack.pop();
stack.push(op1+op2);
break;
case "-":
op2=stack.pop();
op1=stack.pop();
stack.push(op1-op2);
break;
case "*":
op2=stack.pop();
op1=stack.pop();
stack.push(op1*op2);
break;
case "/":
op2=stack.pop();
op1=stack.pop();
stack.push(op1/op2);
break;
default:
stack.push(Integer.valueOf(s));
break;
}
}
return stack.pop();
}
}
关于栈和波兰表达式的详解:
数据结构(Java实现)-详解栈(实现中缀表达式计算器、逆波兰计算器 中缀表达式转逆波兰表达式过程)