一.问题描述
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:
输入:tokens = [“2”,“1”,"+",“3”,"*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
二.示例代码
public class InverseExpreEval150 {
public static void main(String[] args) {
List<String> inputs = Arrays.asList("2", "1", "+", "3", "*");
List<String> inputs1 = Arrays.asList("10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+");
int result = InverseExpreEval(inputs1);
System.out.println(result);
}
private static int InverseExpreEval(List<String> inputs) {
Stack<Integer> optNum = new Stack<>();
for (String str : inputs) {
if (isNumeric(str)) {
optNum.push(Integer.parseInt(str));
continue;
}
Calculate(optNum, str);
}
return optNum.pop();
}
private static void Calculate(Stack<Integer> optNum, String str) {
Integer opt2 = optNum.pop();
Integer opt1 = optNum.pop();
switch (str) {
case "+":
optNum.push(opt1 + opt2);
break;
case "-":
optNum.push(opt1 - opt2);
break;
case "*":
optNum.push(opt1 * opt2);
break;
case "/":
optNum.push(opt1 / opt2);
break;
}
}
public static boolean isNumeric(String str) {
return !(str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/"));
}
}