题目:
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
示例:
输入:candidates = [2,3,6,7], target = 7
输出:[[7],[2,2,3]]
代码:
public class Test16 {
@Test
public void test(){
int[] candidates = new int[]{2,3,6,7};
List<List<Integer>> lists = new Test16().combinationSum(candidates, 7);
for (List<Integer> list : lists) {
System.out.println(list);
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> resultChild = new ArrayList<Integer>();
int sum = 0;
Arrays.sort(candidates);
function(candidates,0,target,sum,result,resultChild);
return result;
}
public void function(int[] candidates,int index,int target, int sum,List<List<Integer>> result,List<Integer> resultChild){
if (sum>target) {
return;
}else if(sum==target){
result.add(resultChild);
return;
}else{
for (int i = index; i < candidates.length ; i++) {
List<Integer> temp = new ArrayList<Integer>();
temp.addAll(resultChild);
temp.add(candidates[i]);
function(candidates,i,target,sum+candidates[i],result,temp);
}
}
}
}