题目🌵
📝Leetcode 216. 组合总和 III
✏️leetcode-cn.com/problems/co…
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。
解题思路💡
-
递归+回溯
-
回溯的本质就是穷举,我们这里可以抽象成一个n叉树
-
回溯需要终止条件
-
在当前题目中,当路径中的元素个数===数组元素个数,即为一组排列组合
if (path.length === k) {//当数组元素===原来数组的个数,说明一种排列组合完成 if(sum===n){ // 满足题意的存进结果 res.push([...path]) } //递归终止 return } -
定义used数组,为了保证当前的排列中用的元素唯一
-
var combinationSum3 = function (k, n) {
const result = [], path = []
backTracking(1, 0, k, n)
function backTracking(startIndex, sum, limitLen) {
if (sum > n)
return
if (path.length === limitLen) {
if (sum === n) {
result.push([...path])
}
return
}
for (let i = startIndex; i <= 9; i++) {
path.push(i)
sum += i
backTracking(i + 1, sum, limitLen)
sum -= i
path.pop()
}
}
return result
};