如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+。
将(4 + (13 / 5)) 拆解为后缀表达式的方法:将每个括号内的运算符提取到括号之外
对于这个题,我们可以运用栈的功能来完成。
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for (String s:tokens) {
//1、判断这个元素是否为数字
if (!isNumber(s)) {
//2、如果是数字,就将这个元素转成整型,存到栈中
stack.push(Integer.parseInt(x));
} else {
//3、如果不是数字,就说明是运算符。所以此时栈中肯定存在两个元素,暂时先将这两个元素从栈中取出来
int number2 = stack.pop();
int number1 = stack.pop();
//4、根据此时的运算符,挑选对应的运算。运算完成再将结果从新存入栈中,以此循环
switch (s) {
case "+":
stack.push(number1 + number2);
break;
case "-":
stack.push(number1 - number2);
break;
case "*":
stack.push(number1 * number2);
break;
case "/":
stack.push(number1 / number2);
break;
}
}
}
//5、最后将栈中的最后一个元素返回,即运算结果
return stack.pop();
}
public static boolean isNumber(String s) {
if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
return true;
}
return false;
}