Skip to content

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