在 JavaScript 中评估反向波兰表示法算法

我正在尝试在 JavaScript 中实现反向波兰符号算法。

问题:

计算反向波兰表示法中算术表达式的值。

有效的运算符是 +、-、*、/。每个操作数可以是一个整数或另一个表达式。

笔记:

两个整数之间的除法应截断为零。给定的 RPN 表达式总是有效的。这意味着表达式将始终计算结果并且不会有任何被零除的操作。

例子:

Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]

Output: 22

Explanation: 

  ((10 * (6 / ((9 + 3) * -11))) + 17) + 5

= ((10 * (6 / (12 * -11))) + 17) + 5

= ((10 * (6 / -132)) + 17) + 5

= ((10 * 0) + 17) + 5

= (0 + 17) + 5

= 17 + 5

= 22

我的解决方案:


var evalRPN = function(tokens) {

    let set = new Set();

    set.add('+');

    set.add('-');

    set.add('/');

    set.add('*');

    

    let i = 0;

    while(tokens.length > 1) {

        if(set.has(tokens[i+2])) {

            const result = calculate(parseInt(tokens[i]), parseInt(tokens[i+1]), tokens[i+2]);

            tokens.splice(i, 3, result);

            i = 0;

        } else

            i++;

    }

    

    return tokens[0];

};

    

const calculate = (left, right, operator) => {

    let res;

    switch(operator) {

        case '+':

            res = left + right;

            break;

        case '-':

            res = left - right;

            break;

        case '*':

            res = left * right;

            break;

        case '/':

            res = left / right;

            break;

    }

    

    return res;

}


我的代码返回 12,但答案应该是 11。



牛魔王的故事
浏览 87回答 1
1回答

手掌心

你有要求两个整数之间的除法应截断为零。因此,您需要:case '/':     res = Math.trunc(left / right);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript