241. 为运算表达式设计优先级

124 阅读1分钟

241. 为运算表达式设计优先级

给你一个由数字和运算符组成的字符串 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;
};