给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。
let memo = new Map();
var diffWaysToCompute = function (expression) {
if (memo.has(expression)) {
return memo.get(expression);
}
let res = [];
for (let i = 0; i < expression.length; i++) {
let c = expression.charAt(i);
if (c == "*" || c == "+" || c == "-") {
let left = diffWaysToCompute(expression.slice(0, i));
let right = diffWaysToCompute(expression.slice(i + 1));
for (let a of left) {
for (let b of right) {
switch (c) {
case "*":
res.push(a * b);
break;
case "+":
res.push(a + b);
break;
case "-":
res.push(a - b);
break;
}
}
}
}
}
if (!res.length) {
res.push(parseInt(expression));
}
memo.set(expression, res);
return res;
};