参考文章
思路:
挺简单的题目的,逆波兰表达式相当于二叉树中的后序遍历,这个在学习二叉树的时候就接触到了。但是这一道题没有必要从二叉树的角度去解决,题目最后都写明白了,直接用个栈就解决了。关于栈的使用可以参考《有效的括号》和《删除字符串中的所有相邻重复项》这两道题。
本题Java代码:
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> deque = new LinkedList<>();
for (String s : tokens) {
if (s.equals("+") && deque.size() >= 2) {
int a = deque.pollFirst();
int b = deque.pollFirst();
deque.offerFirst(b + a);
} else if (s.equals("-") && deque.size() >= 2) {
int a = deque.pollFirst();
int b = deque.pollFirst();
deque.offerFirst(b - a);
} else if (s.equals("*") && deque.size() >= 2) {
int a = deque.pollFirst();
int b = deque.pollFirst();
deque.offerFirst(b * a);
} else if (s.equals("/") && deque.size() >= 2) {
int a = deque.pollFirst();
int b = deque.pollFirst();
deque.offerFirst(b / a);
} else {
deque.offerFirst(Integer.parseInt(s));
}
}
return deque.pollFirst();
}
}