LeetCode:组合总数III【216】
LeetCode:组合总数III【216】
题目描述
找出所有相加之和为 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]]
题目分析
采用递归回溯框架解题即可。
Java题解
class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> ans = new ArrayList<>(); backtrack(ans,new ArrayList<>(),k,n,0,0,1); return ans; } public void backtrack(List<List<Integer>> list,List<Integer> tmpList,int k,int n,int curk,int curn,int num) { if(curn>n||curk>k) return; if(curk==k&&curn==n) list.add(new ArrayList<>(tmpList)); else{ for(int i=num;i<10;i++) { tmpList.add(i); backtrack(list,tmpList,k,n,curk+1,curn+i,i+1); tmpList.remove(tmpList.size()-1); } } } }