整体思路就是利用栈不停的pop,但是细节:
1.后出来的计算前面出来的
2.出发那里得自己声明两个变量保存前后pop出来的数
3.有亿点点小坑,,,,stack.pop()函数那如果没有选择正确的函数会一直NoSuchElementException.....有没有大神解答。。
class Solution {
public int evalRPN(String[] tokens) {
//创建双向队列
Deque<Integer> stack = new LinkedList();
//遍历字符串
//原则是后pop出来的数 计算 前pop出来的数
for (String s : tokens) {
if ("+".equals(s)) { // leetcode 内置jdk的问题,不能使用==判断字符串是否相等
stack.push(stack.pop() + stack.pop()); // 注意 - 和/ 需要特殊处理
} else if ("-".equals(s)) {
stack.push(-stack.pop() + stack.pop());
} else if ("*".equals(s)) {
stack.push(stack.pop() * stack.pop());
} else if ("/".equals(s)) {
int temp1 = stack.pop();
int temp2 = stack.pop();
stack.push(temp2 / temp1);
} else {
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}