# 逆波兰表达式求值 (opens new window)
Tip: 除号取整注意考虑正负
- 难度:Medium
- 标签:栈
# 刷题思路
- [x] 栈
- [ ] xx
# 方法 1 栈
- 复杂度:
- 时间 O(n), 一次遍历.
- 空间 O(n), stack空间 O(n).
var evalRPN = function(tokens) {
const set = new Set(['+', '-', '*', '/'])
const stack = []
tokens.forEach(token => {
if (set.has(token)) {
const [right, left] = [stack.pop(), stack.pop()]
let tmp = 0
if (token === '+') tmp = left + right
else if (token === '-') tmp = left - right
else if (token === '*') tmp = left * right
else if (token === '/') {
tmp = left / right
tmp = tmp > 0 ? Math.floor(tmp) : -Math.floor(-tmp)
}
stack.push(tmp)
} else {
stack.push(Number(token))
}
})
return stack.pop()
};
# 方法 2
- 复杂度:
- 时间 O()
- 空间 O()
JS刷题记录 Leetcode-js (opens new window) 每周都会更新刷题心得或者题解, 你的点赞或 star 都将助力我产出更好内容~