← [ BACK_TO_NOTES ]

逆波兰表达式求值

表达式求值栈基础题:遇数字入栈,遇运算符就弹出两个操作数计算后压回去。

#algorithm #snippet #evergreen #leetcode #stack

[!info] related notes 算法面试题型 MOC 栈

逆波兰表达式求值

题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/

题型判断

这是表达式求值栈的基础题。

后缀表达式的特点是:

  • 数字出现时,先记下来
  • 运算符出现时,立刻用前面最近的两个数字计算

所以天然适合用栈保存操作数。

核心思路

  • 遇到数字:入栈
  • 遇到运算符:弹出两个数 b 和 a
  • 计算 a op b
  • 把结果再压回栈

题目保证表达式有效、除数非零,计算结果处于给定整数范围,因此最后栈里只剩一个结果。这个示例不是通用表达式解析器:题目之外还需验证 token、操作数数量与数值范围。

易错点

  • 顺序不能写反:一定是先弹 b,再弹 a
  • 除法要按题意向 0 取整,例如 -7 / 3 得到 -2,不能用向下取整的 Math.floor

JavaScript

var evalRPN = function(tokens) {
    const stack = [];

    for (const token of tokens) {
        if (token === '+' || token === '-' || token === '*' || token === '/') {
            const b = stack.pop();
            const a = stack.pop();
            let res = 0;

            if (token === '+') res = a + b;
            if (token === '-') res = a - b;
            if (token === '*') res = a * b;
            if (token === '/') res = Math.trunc(a / b);

            stack.push(res);
        } else {
            stack.push(Number(token));
        }
    }

    return stack[0];
};

一句话总结

遇到运算符时,最近入栈的两个数字正好就是当前这一步要计算的操作数。

创建于 2026/3/19 更新于 2026/10/7
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本