Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)
Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)
同类题目:
Leetcode之回溯法专题-39. 组合总数(Combination Sum)
Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II)
找出所有相加之和为 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和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); } }
作者:秦羽纶
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.