package demo10;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CombinationSum {
public static void main(String[] args) {
int[] candidates = new int[]{2,3,6,7};
int target = 7;
Arrays.sort(candidates);
List<List<Integer>> result = combinationSum(candidates, target);
System.out.println(result.toString());
}
public static List<List<Integer>> combinationSum(int[] candidates,int target){
List<List<Integer>> result = new ArrayList<>();
List<Integer> list = new ArrayList<>();
if (candidates == null || candidates.length == 0)
return result;
dfs(candidates,target,0,list,result);
return result;
}
public static void dfs(int[] candidates,int target,int start,List<Integer> list,List<List<Integer>> result){
if(target == 0){
result.add(new ArrayList<>(list));
return;
}
for (int i = start; i < candidates.length; i++) {
if(candidates[i]<=target){
list.add(candidates[i]);
dfs(candidates,target-candidates[i],i,list,result);
list.remove(list.size()-1);
}
}
}
}