【问题标题】:Evaluate Reverse Polish Notation Algorithm in JavaScript在 JavaScript 中评估逆波兰表示法算法
【发布时间】:2020-11-25 17:04:50
【问题描述】:

我正在尝试在 JavaScript 中实现 Reverse Polish notation 算法。

问题:

计算逆波兰算术表达式的值 符号。

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

注意:

两个整数之间的除法应该向零截断。给定的 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;
}

它适用于示例和大多数测试用例。但是,对于下面的测试用例它失败了:

Input: ["-8","23","8","-","9","23","-","-","*","33","-8","/","+","38","-14","-","-","-7","32","-19","-","11","+","+","+","14","22","-","-","27","-9","-","+","31","+","-12","-11","-","-","14","+","30","+","37","30","-","+","-9","+","7","-","37","+","-5","13","/","-","19","-2","-19","12","+","-","23","+","-","-19","-","+","6","+","-17","+","17","+","5","36","+","-10","+","+","23","-8","-","-","18","-","31","-16","-","+","34","+","-6","+","24","-","22","-","-8","-","28","+","-12","+","39","28","-7","+","+","-14","5","+","5","+","10","+","+","+","-18","*","10","+","-5","11","-","6","+","-","-12","31","+","+","30","29","-","-","39","+","13","-8","-5","+","-","26","19","-","*","-","10","-","-20","5","+","+","0","-","28","-","19","/","28","+","-18","-","28","20","+","-5","-19","+","+","-","-12","-","3","-","6","-15","+","4","-","-","38","+","-9","-","38","-","12","-20","-","10","5","-15","-","-","-","+","-11","+","5","+","2","-","28","+","-9","-11","-","+","37","-","-17","31","-","2","+","+","-16","-12","-","-","12","+","34","-","15","+","8","+","17","-","2","-","33","+","-5","+","14","+","29","-","33","23","+","26","30","-","+","+","39","+","9","24","-","-","20","15","+","-","24","+","37","-","30","-1","-","+","34","+","-13","-","23","15","-","-","-5","-8","8","30","35","-9","22","+","-","-","36","-1","+","5","-","-","+","25","-","+","27","-","16","+","+","+","39","-","15","-","-3","+","5","-6","-","+","-6","-15","-7","-","+","/","13","-","18","+","4","+","29","+","-17","0","-6","-20","-17","+","12","-","+","-","+","+","-10","22","+","+","-11","-","-2","38","-","-","-6","+","0","-","-10","+","-4","-10","+","-","0","-","31","30","-","37","5","+","+","+","-15","+","38","4","-","-16","-17","+","+","+","38","-","27","-19","/","12","+","/"]

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

【问题讨论】:

    标签: javascript algorithm


    【解决方案1】:

    你有要求

    两个整数之间的除法应该向零截断。

    因此,您需要:

    case '/':
        res = Math.trunc(left / right);
    

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2015-06-15
      • 1970-01-01
      • 2021-11-29
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多