题目(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(); }
|