Orion's Studio.

算法(43)-逆波兰表达式求值

2024/03/16

题目(medium)

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 ‘+’、’-‘、’*’ 和 ‘/‘ 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

思路

相当于二叉树中的后序遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const evalRPN = (tokens) => {
const stack = [];
for(const token of tokens) {
if (isNaN(Number(token))) {
const n2 = stack.pop();
const n1 = stack.pop();
switch(token) {
case '+':
stack.push(n1 + n2);
break;
case '-':
stack.push(n1 - n2);
break;
case '*':
stack.push(n1 * n2);
break;
case '/':
stack.push(n1 / n2 | 0);
break;
}
} else {
stack.push(Number(token));
}
}
return stack.pop();
}
CATALOG
  1. 1. 题目(medium)
  2. 2. 思路