150. 逆波兰表达式求值
思路
用栈的操作,想到的是遍历,如果当前是数字且下一个是操作符,就pop()进行运算,运算完再放进去。但是没必要则麻烦,直接分为数字和运算符,逐一遍历,数字就push,运算符就pop
class Solution {
public int evalRPN(String[] tokens) {
//是数字就放进栈里 不是就做操作
Stack<Integer> stack = new Stack();
for(int i=0; i<tokens.length; i++){
if(Objects.equals(tokens[i], "-") || Objects.equals(tokens[i], "+")
|| Objects.equals(tokens[i], "*") || Objects.equals(tokens[i], "/")){
Integer pop = stack.pop();
Integer pop1 = stack.pop();
Integer result = 0;
//⏰此处注意操作顺序,是pop1在前进行运算操作
if (Objects.equals(tokens[i], "-")) result=pop1-pop;
if (Objects.equals(tokens[i], "+")) result=pop1+pop;
if (Objects.equals(tokens[i], "*")) result=pop1*pop;
if (Objects.equals(tokens[i], "/")) result=pop1/pop;
stack.push(result);
}else{
stack.add(Integer.valueOf(tokens[i]));
}
}
return stack.pop();
}
}