逆波兰表达式求值
解法一:栈
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class LeetCode_150 {
public static int evalRPN(String[] tokens) {
if (tokens.length == 1) {
return Integer.valueOf(tokens[0]);
}
List<String> operatorList = new ArrayList<>();
operatorList.add("+");
operatorList.add("-");
operatorList.add("*");
operatorList.add("/");
Stack<Integer> nums = new Stack<>();
for (int i = 0; i < tokens.length; i++) {
if (operatorList.contains(tokens[i])) {
int num1 = Integer.valueOf(nums.pop());
int num2 = Integer.valueOf(nums.pop());
if ("+".equals(tokens[i])) {
nums.push(num2 + num1);
} else if ("-".equals(tokens[i])) {
nums.push(num2 - num1);
} else if ("*".equals(tokens[i])) {
nums.push(num2 * num1);
} else if ("/".equals(tokens[i])) {
nums.push(num2 / num1);
}
} else {
nums.push(Integer.valueOf(tokens[i]));
}
}
return nums.pop();
}
public static void main(String[] args) {
String[] tokens = new String[]{"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"};
System.out.println(evalRPN(tokens));
}
}