216 组合总和III
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
题解
这题和77组合类似。也是可以用递归进行求解。
递归的参数,n,k,当前的组合(currentResults), currentIndex 递归的终止条件,等于或者大于n时就应该退出。 递归的单层逻辑
javascript
var combinationSum3 = function (k, n) {
var finalResults = []
var combinationSum3Inner = function(k,n,currentResults, currentIndex) {
const currentSum = currentResults.reduce((prev, curr) => curr + prev, 0)
if (currentSum >= n) {
if (currentSum === n && currentResults.length === k) {
finalResults.push([...currentResults])
}
return
}
//假设n=3,那么第一轮只能取到7(因为7后面只能是8,没有下一位了)
for(let i=currentIndex;i<9-k+currentResults.length + 1;i++) {
combinationSum3Inner(k,n,[...currentResults, i+1], i+1)
}
}
combinationSum3Inner(k,n,[], 0)
return finalResults
}