Skip to content

📚 5.逆波兰表达式求值

💻 代码实现

typescript
/**
 * @url https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/
 */

const operators = ["+", "-", "*", "/"]
type computeType = "+" | "-" | "*" | "/"
const compute = (operators: computeType, top1: string, top2: string) => {
    switch (operators) {
        case "+":
            return String(Number(top1) + Number(top2))
        case "-":
            return String(Number(top1) - Number(top2))
        case "*":
            return String(Number(top1) * Number(top2))
        case "/":
            return String(Number.parseInt(String(Number(top1) / Number(top2)))) //notice: Math.floor向下取整,注意负数的形式。 -0.4 会取整为-1
    }
}

function evalRPN(tokens: string[]): number {
    let stack: Array<string> = [] // 存储栈
    for (let i = 0; i < tokens.length; i++) {
        console.log("tokens", stack)

        if (operators.includes(tokens[i])) {
            if (stack.length < 2) {
                stack.push(tokens[i])
            } else {
                const top2 = stack.pop()
                const top1 = stack.pop()
                stack.push(compute(tokens[i] as computeType, top1!, top2!))
            }
        } else {
            stack.push(tokens[i])
        }
    }
    return Number(stack.pop())
}

// console.log(evalRPN(["2", "1", "+", "3", "*"]))
// console.log(evalRPN(["4", "13", "5", "/", "+"]))

Released under the MIT License.