评估JavaScript中的反向波兰表示法算法
我试图用JavaScript实现这个算法 问题: 以反向抛光方式计算算术表达式的值 符号 有效运算符为+、-、*、/。每个操作数可以是整数或整数 另一个表达 注: 两个整数之间的除法应该向零截断。给定的 RPN表达式始终有效。这意味着表达式将始终 对结果求值,将不会有任何除零操作 例如:评估JavaScript中的反向波兰表示法算法,javascript,algorithm,Javascript,Algorithm,我试图用JavaScript实现这个算法 问题: 以反向抛光方式计算算术表达式的值 符号 有效运算符为+、-、*、/。每个操作数可以是整数或整数 另一个表达 注: 两个整数之间的除法应该向零截断。给定的 RPN表达式始终有效。这意味着表达式将始终 对结果求值,将不会有任何除零操作 例如: Input: ["10", "6", "9", "3", "+", "-11", &quo
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。您有这个要求 两个整数之间的除法应该向零截断 因此,您需要:
case '/':
res = Math.trunc(left / right);
你有要求吗 两个整数之间的除法应该向零截断 因此,您需要:
case '/':
res = Math.trunc(left / right);