找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。所有数字都是正整数。解集不能包含重复的组合。
回溯法
- 时间复杂度
,空间复杂度O(k)
- Runtime: 101 ms, faster than 33.78%
- Memory Usage: 38.8 MB, less than 64.86%
/**
* @param {number} k
* @param {number} n
* @return {number[][]}
*/
var combinationSum3 = function(k, n) {
const res = [];
backtrack(n, k, [], 0, res);
return res;
};
var backtrack = function(remain, k, cur, start, res) {
if (remain === 0 && cur.length === k) {
res.push(cur.slice());
return;
} else if (remain < 0 || cur.length > k) {
return;
}
for (let i = start; i < 9; i++) {
cur.push(i + 1);
backtrack(remain - i - 1, k, cur, i + 1, res);
cur.pop();
}
}
网友评论