26.逆波蘭表達式求值

題目描述:

在這裏插入圖片描述

代碼實現:

  • 關鍵在於理解題意,運用棧存儲數字,遍歷到運算符,則取棧頂兩個元素運算即可。
  • 時間複雜度:O(n)
/**
 * @param {string[]} tokens
 * @return {number}
 */
var evalRPN = function(tokens) {
    var calculate = (s1, s2, char) => {
        switch (char) {
            case "+":
            return s1 + s2
            case "-":
            return s1 - s2
            case "*":
            return s1 * s2
            case "/":
            return Math.trunc(s1 / s2)
        }
    }
    var stack = []
    var res = 0
    for (var i = 0; i < tokens.length; i++ ) {
        if (tokens[i] === "+" || tokens[i] === "-" || tokens[i] === "*" || tokens[i] === "/") {
            var s2 = stack.pop(),
                s1 = stack.pop()
            res = calculate(Number(s1), Number(s2), tokens[i])
            stack.push(res)
        } else {
           stack.push(tokens[i])
        }
    }
    return stack.pop()
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章