题目简述:从1-9中找出k个数字,凑出的和为n,元素不能重复使用
直接套用回溯模板即可,这里的剪枝条件也是比较明显的,k个元素,sum的限制
var combinationSum3 = function (k, n) {
let res = []
var backtrack = function (start, one, sum) {
// 满足条件
if (one.length === k && sum === 0) {
res.push([...one])
return
}
// 不符合条件,直接剪枝 return
if (one.length > k || sum < 0) return
for (let i = start; i < 10; ++i) {
one.push(i)
// 因为题目要求,不能包含重复元素,所以起始点为 i + 1
// 也就是下一个元素
// Each number is used at most once
backtrack(i + 1, one, sum - i)
// 回溯
one.pop()
}
}
// 起始点为 1
backtrack(1, [], n)
return res
};