找出所有相加之和为 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]]来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iii
经典的回溯问题中的组合问题
package 字符串.回溯;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class 组合总和III_216 {
static int s=0;
static public List<List<Integer>> combinationSum3(int k, int n) {
ArrayList<List<Integer>> list = new ArrayList<>();
LinkedList<Integer> linkedList = new LinkedList<>();
backtracking(k,n,1,linkedList,list);
return list;
}
static void backtracking(int k,int n,int startIndex,LinkedList<Integer>linklist,List<List<Integer>>list){
if (s>n) return;
if (s==n&&linklist.size()==k){
list.add(new ArrayList<>(linklist));
return;
}
for (int i = startIndex; i <= 9-(k-linklist.size())+1; i++) {
linklist.add(i);
s+=i;
backtracking(k,n,i+1,linklist,list);
s-=linklist.getLast();
linklist.removeLast();
}
}
public static void main(String[] args) {
System.out.println(combinationSum3(3,7));
}
}