1. 逆波兰表达式求值实战解析
1.1 什么是逆波兰表达式
逆波兰表达式(Reverse Polish Notation,RPN)是一种数学表达式的表示方法,它将运算符放在操作数之后,因此也被称为后缀表达式。与我们日常使用的中缀表达式(如3+4)不同,RPN的表达形式是"3 4 +"。这种表示法的最大优势是完全消除了括号的需求,运算顺序完全由操作符的位置决定。
举个例子:
- 中缀表达式:(2 + 3) × 4
- 逆波兰表达式:2 3 + 4 ×
1.2 栈在RPN求值中的应用原理
栈数据结构在RPN求值中扮演着核心角色,其工作原理如下:
- 初始化一个空栈
- 从左到右扫描表达式:
- 遇到操作数:压入栈中
- 遇到运算符:弹出栈顶两个元素,先弹出的是右操作数,后弹出的是左操作数
- 将运算结果压回栈中
- 最终栈中剩下的唯一元素就是表达式结果
以表达式"3 4 + 5 ×"为例:
- 3入栈 → 栈:[3]
- 4入栈 → 栈:[3, 4]
- 遇到"+":弹出4和3,计算3+4=7 → 栈:[7]
- 5入栈 → 栈:[7, 5]
- 遇到"×":弹出5和7,计算7×5=35 → 栈:[35]
1.3 Java实现详解
java复制class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> stack = new ArrayDeque<>();
for (String token : tokens) {
if (!isOperator(token)) {
stack.push(Integer.parseInt(token));
} else {
int num2 = stack.pop();
int num1 = stack.pop();
int res = calculate(num1, num2, token);
stack.push
