中缀表达式:
我们平时看到的运算式就是中缀表达式 如:3+4
前缀表达式:
将运算符写在操作数之前 如: + 3 4
后缀表达式:
将运算符写在操作数之后 如: 3 4 +
中缀表达式转后缀表达式:
如:
先根据加减乘除的顺序,依次给表达式加括号
如下:
然后从右往左依次将运算符移出对应的括号外
移完后,删除所有括号
得到逆波兰表达式(后缀表达式)
逆波兰表达式求值
题目链接
代码中注释详细
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack=new Stack<>();
for(int i=0;i<tokens.length;i++){
switch(tokens[i]){
//第一次出栈的作为右操作数
//第二次出栈的作为左操作数
case "+":
stack.push(stack.pop()+stack.pop());
break;
case "-":
//注意先后顺序
int a=stack.pop();
stack.push(stack.pop()-a);
break;
case "*":
stack.push(stack.pop()*stack.pop());
break;
case "/":
//注意先后顺序
int b=stack.pop();
stack.push(stack.pop()/b);
break;
//不是运算符的全部入栈
default:
stack.push(Integer.parseInt(tokens[i]));
break;
}
}
return stack.pop();
}
}
还不点赞 😒