Leetcode.150.逆波兰表达式求值
题目难度:中等
题目原题链接
思路:
-
求解表达式的值,第一会想到堆栈来解决,逆波兰式求解和堆栈的先入后出特性一样;
-
逆波兰式,就是由中缀表达得来;
-
中缀表达式(题目所给形式),树的中序遍历,下面图片左边是中缀表达式,右边是后缀表达式
-
后缀表达式,树的后续遍历;
-
前缀表达式,树的前序遍历;
-
判断是数字入栈,判断是运算符则出栈将两个元素运算结果
-
代码,这是官方的代码,他写的比我的好,所以就贴官方的代码了
class Solution {
public int evalRPN(String[] tokens) {
//创建栈
Deque<Integer> stack = new LinkedList<Integer>();
int n = tokens.length;
for (int i = 0; i < n; i++) {
String token = tokens[i];
if (isNumber(token)) {
stack.push(Integer.parseInt(token));
} else {
int num2 = stack.pop();
int num1 = stack.pop();
switch (token) {
case "+":
stack.push(num1 + num2);
break;
case "-":
stack.push(num1 - num2);
break;
case "*":
stack.push(num1 * num2);
break;
case "/":
stack.push(num1 / num2);
break;
default:
}
}
}
return stack.pop();
}
public boolean isNumber(String token) {
return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
}
}