代码随想录算法训练营第二十天 | 216.组合总和III、17.电话号码的字母组合

73 阅读1分钟

216.组合总和III

17.电话号码的字母组合

216. 组合总和III

var combinationSum3 = function(k, n) {
    const res = [];

    const backtrack = (arr, start, sum) => {
        if (arr.length === k && sum === n) {
            res.push([...arr]);
            return;
        }

        for (let i=start; i<10; i++) {
            sum += i;
            arr.push(i);
            // 剪枝
            if (sum > n) {
                sum -= i;
                arr.pop();
                return;
            }
            backtrack(arr, i+1, sum);
            arr.pop();
            sum -= i;
        }
    }

    backtrack([], 1, 0);
    return res;
};

17. 电话号码的字母组合

var letterCombinations = function(digits) {
    const map = {
        2: 'abc',
        3: 'def',
        4: 'ghi',
        5: 'jkl',
        6: 'mno',
        7: 'pqrs',
        8: 'tuv',
        9: 'wxyz'
    };
    const res = [];
    const len = digits.length;

    const backtrack = (str = [], index) => {
        if (str.length === len) {
            if (str.length > 0) {
                res.push([...str].join(''));
           }
            return;
        }

        const subMap = map[digits[index]];
        for (let i=0; i<subMap.length; i++) {
            str.push(subMap[i]);
            backtrack(str, index+1);
            str.pop();
        }
    }
    backtrack([], 0);
    return res;
};