解题思路:
使用栈来解决该问题
首先定义一个栈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());}