后缀表达式,遇到一个运算符的话,就选取运算符前面两个值计算然后放回,这个后缀表达式不需要括号就能起到优先计算的功能.
思路的话就是:
每次遇到两个数在栈中取出两个数计算然后放回栈中
public int evalRPN(String[] tokens) {
Deque<Integer> sk = new LinkedList();
for (int i = 0; i < tokens.length; ++i) {
if ("+".equals(tokens[i])) { // leetcode 内置jdk的问题,不能使用==判断字符串是否相等
stack.push(sk.pop() + sk.pop()); // 注意 - 和/ 需要特殊处理
} else if ("-".equals(tokens[i])) {
stack.push(-sk.pop() + sk.pop());
} else if ("*".equals(tokens[i])) {
stack.push(sk.pop() * sk.pop());
} else if ("/".equals(tokens[i])) {
int temp1 = sk.pop();
int temp2 = sk.pop();
stack.push(temp2 / temp1);
} else {
sk.push(Integer.valueOf(tokens[i]));
}
}
return sk.pop();
}
这里不得不提出一个问题.
Deque 和 stack ,为什么选用 Deque ,之前我一直用的都是stack,然后上网查了一下,jdk文档不推荐使用stack ,相比于stack里面太多的无所谓的东西,deque完成了stack的所有功能,而且本身是一个接口,非常的纯洁,效率比stack也要高一点(感觉上,stack跑起来8ms,deque跑起来5ms)
就这样