Skip to content

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
}

上次更新于: