leetcode 216题

Posted by franki on September 15, 2021

leetcode 216题 组合总和 III

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。 解集不能包含重复的组合。 

示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]

示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

思路

回溯

代码

/**
 * @param {number} k
 * @param {number} n
 * @return {number[][]}
 */
var combinationSum3 = function(k, n) {
    let index = 1, c = [], res = [];
    return combine(index, k, n, c, res);
};

function combine(index, k, target, c, res) {
    if (target === 0) {
        if (k === c.length) {
            res.push([...c]);
        }
    }
    for (let i=index; i<10; i++) {
        c.push(i);
        combine(i+1, k, target - i, c, res);
        c.pop();
    }
    return res;
}

复杂度分析

  • 时间复杂度:O(N^2)
  • 空间复杂度:O(N)