Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

同类题目:

Leetcode之回溯法专题-39. 组合总数(Combination Sum)

Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II)


 

 

找出所有相加之和为 的 个数的组合组合中只允许含有 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和n,求1-9中,取k个数,让他们和为n。

同样的,用回溯法,分为取和不取两个分支,并在之中加上和的判断还有取的个数的判断。

class Solution {
    
    List<List<Integer>> ans = new ArrayList<>();
    public List<List<Integer>> combinationSum3(int k, int n) {
        if(k==0 || n==0) return ans;
        dfs(k,n,1,new ArrayList<Integer>(),0);
        return ans;
    }
    public void dfs(int k,int n,int step,ArrayList<Integer> list,int sum){
        if(list.size()==k && sum==n){
            ans.add(new ArrayList<>(list));
            return;
        }
        if(step>9) return;
        
        
        
        list.add(step);
        dfs(k,n,step+1,list,sum+step);
        list.remove(list.size()-1);
        dfs(k,n,step+1,list,sum);
    }
}

 

posted @ 2019-08-10 00:18  秦羽纶  阅读(242)  评论(0编辑  收藏  举报