150. 逆波兰表达式求值
- 题号:150
- 来源:LeetCode
- 难度:中等
- 标签:
栈数组 - 语言:TypeScript
- 解法:1 个
- 作者:lmliheng
- 最近更新:2026-09-27
TypeScript · O(n) 时间 · O(n) 空间 · 更新于 2026-09-27
用数组模拟栈,遇运算符弹两个数算完再压回
typescript
/**
* @difficulty medium
* @tags 栈,数组
* @time O(n)
* @space O(n)
* @note 用数组模拟栈,遇运算符弹两个数算完再压回
* @150. 逆波兰表达式求值
*/
/**
* @param {string[]} tokens
* @return {number}
*/
function evalRPN(tokens: string[]): number {
// 向零截断
const ToZero = (val: number): number => {
if (val >= 0) {
return Math.floor(val)
} else if (Number.isInteger(val)) {
return val
} else {
return Math.floor(val) + 1
}
}
// 从左至右
for (let i = 0; i < tokens.length; i++) {
if (tokens.length === 1) {
return +(tokens[0])
}
if (tokens[i] === '+') {
let num: number = (+tokens[i-1]) + (+tokens[i-2])
tokens.splice(i-2, 3, num.toString())
i = i - 2
} else if (tokens[i] === '-') {
let num: number = (+tokens[i-2]) - (+tokens[i-1])
tokens.splice(i-2, 3, num.toString())
i = i - 2
} else if (tokens[i] === '*') {
let num: number = (+tokens[i-1]) * (+tokens[i-2])
tokens.splice(i-2, 3, num.toString())
i = i - 2
} else if (tokens[i] === '/') {
console.log(tokens)
let num: number = ToZero((+tokens[i-2]) / (+tokens[i-1]))
tokens.splice(i-2, 3, num.toString())
console.log(tokens)
i = i - 2
}
}
if (tokens.length === 1) {
return +(tokens[0])
}
return 0
}
// console.log(evalRPN(["1","3","+","4","*"]))
// console.log(evalRPN(["4","13","5","/","+"]))
// console.log(evalRPN(["10","6","9","3","+","-11","*","/","*","17","+","5","+"]))
console.log(evalRPN(["4","-2","/","2","-3","-","-"]))
export {};源码:ts/leetcode/150. 逆波兰表达式求值.ts
在 GitHub 上查看题目所在目录:lmliheng/algorithm