day11
Lc150. 逆波兰表达式求值
逆波兰表达式其实就是后缀表达式 是指运算符写在后面。 使用栈来求解
遇到数字就放入栈内 遇到操作符就**取出栈顶两个数字进行计算,并将结果压入栈中**
注意:
在本题要注意: 减法和除法 是对前后两个顺序有要求 后弹出的减去 或者除以先弹出的. 因为在栈中,后进先出会导致先压入的元素在减法时应该作为减数,后压入的元素应作为被减数。 所以 减法的写法是 -d.pop() + d.pop() 如果不想这样写 就换成除法一样 两个int
public int evalRPN(String[] tokens) {
Deque<Integer> d = new LinkedList<>();
for(String s : tokens){
if("+".equals(s)) d.push(d.pop() + d.pop());
else if("-".equals(s)) d.push(-d.pop() + d.pop());
else if("*".equals(s)) d.push(d.pop() * d.pop());
else if("/".equals(s)) {
int n1 = d.pop();
int n2 = d.pop();
d.push(n2 / n1);
}else d.push(Integer.valueOf(s));
}
return d.pop();
}