题意:这道题是逆波兰式的求解,不了解逆波兰式的朋友可以参考一下逆波兰表示法 - wiki。
例子:
[“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
逆波兰式有个优点就是他不需要括号来表示优先级,直接根据式子本身就可以求解。思路是维护一个运算数栈,读到运算数的时候直接进栈;而读到一个运算符,就从栈顶取出两个运算数,运算之后将结果做为一个运算数放回栈中,直到式子结束,此时栈中唯一一个元素便是结果。题目较为简单,代码如下:
import java.util.Stack;
public class Solution {
public static int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
int len = tokens.length;
int temp = 0;
for(int i = 0; i < len; i++){
if(tokens[i].equals("+")){
temp = stack.pop() + stack.pop();
stack.push(temp);
}else if(tokens[i].equals("-")){
int a = stack.pop();
int b = stack.pop();
temp = b - a;
stack.push(temp);
}else if(tokens[i].equals("*")){
temp = stack.pop() * stack.pop();
stack.push(temp);
}else if(tokens[i].equals("/")){
int a = stack.pop();
int b = stack.pop();
temp = b / a;
stack.push(temp);
}else{
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
public static void main(String[] args) {
String[] tokens = {"0", "3", "/"};
System.out.println(evalRPN(tokens));
}
}