解题思路:
使用栈来解决该问题
首先定义一个栈Stack,接着对tokens数组进行遍历,如果当前元素是非数字字符串的话(运算符),就从栈中取出两个元素根据该运算符进行计算,将计算后的结果添加到栈中。如果当前元素是数字字符串,直接将其添加到栈中。
代码实现:
//逆波兰式表达式求值
public static int evalRPN(String[] tokens) {
Stack<String> resStack=new Stack<>();
for(String s:tokens)
{
if("+".equals(s))
{
Integer num1 = Integer.valueOf(resStack.pop());
Integer num2 = Integer.valueOf(resStack.pop());
int sum = num2 + num1;
resStack.push(String.valueOf(sum));
}
else if("-".equals(s))
{
Integer num1 = Integer.valueOf(resStack.pop());
Integer num2 = Integer.valueOf(resStack.pop());
int sub = num2-num1;
resStack.push(String.valueOf(sub));
}
else if("*".equals(s))
{
Integer num1 = Integer.valueOf(resStack.pop());
Integer num2 = Integer.valueOf(resStack.pop());
int mul = num2*num1;
resStack.push(String.valueOf(mul));
}
else if ("/".equals(s))
{
Integer num1 = Integer.valueOf(resStack.pop());
Integer num2 = Integer.valueOf(resStack.pop());
int div = num2/num1;
resStack.push(String.valueOf(div));
}
else
{
resStack.push(s);
}
}
return Integer.valueOf(resStack.pop());
}