我正在尝试在 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。
手掌心
相关分类