216. 组合总和 III

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了216. 组合总和 III脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。解集不能包含重复的组合。 示例 1:

输入: k = 3, n = 7输出: [[1,2,4]]示例 2:

输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]

 

本题k相当于了树的深度,9(因为整个集合就是9个数)就是树的度。

例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。

选取过程如图:

216. 组合总和 III

图中,可以看出,只有最后取到集合(1,3)和为4 符合条件。

 

回溯三部曲

  • 确定递归函数参数
  • 确定终止条件
  • 单层搜索过程

别忘了处理过程 和 回溯过程是一一对应的,处理有加,回溯就要有减!

class Solution {

    PRivate List<List<Integer>> res=new ArrayList<>();;
    private LinkedList<Integer> path=new LinkedList<>();

    public List<List<Integer>> combinationSum3(int k, int n) {
        process(n,0,1,k);
        return res;

    }

    private void process(int targetSum,int curSum,int startIndex,int k){
        //base case
        if(path.size()==k){
            if(targetSum==curSum){
                res.add(new ArrayList<>(path));
            }
        }
        if(curSum>targetSum){
            return;
        }
        for(int i=startIndex;i<=9-(k-path.size())+1;i++){
            curSum+=i;
            path.add(i);
            process(targetSum,curSum,i+1,k);
            // 回溯
            path.removeLast();
            // 回溯
            curSum-=i;
        }

    }
}

  

  

脚本宝典总结

以上是脚本宝典为你收集整理的216. 组合总和 III全部内容,希望文章能够帮你解决216. 组合总和 III所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。