描述
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may
be chosen from C unlimited number of times.
Note: All numbers (including target) will be positive integers. Elements in a combination (a1, a2, ... , ak) must be in non-descending order. (ie, a1 <= a2 <= ... <= ak). The
solution set must not contain duplicate combinations. For example, given candidate
set 2,3,6,7 and target 7, A solution set is:
[7]
[2, 2, 3]
代码
package com.lilei.spring_boot_db.boot.pack1115;
import java.util.ArrayList;
import java.util.List;
public class combination_sum {
public static void main(String[] args) {
int[] array = new int[]{2,3,6,7};
com_sum(array,0,0,8,new ArrayList<Integer>());
}
static void com_sum(int[] array,int p,int value,int target,List<Integer> list){
if (value + array[p] < target){
List<Integer> dest1 = new ArrayList<Integer>();
copyList(dest1,list);
dest1.add(array[p]);
com_sum(array,p,value+ array[p],target,dest1);
if (p+1 < array.length) {
List<Integer> dest2 = new ArrayList<Integer>();
copyList(dest2,list);
com_sum(array, p + 1, value, target,dest2);
}
}else if (value + array[p] == target){
list.add(array[p]);
for(int v:list)
System.out.print(v+",");
System.out.println();
}
}
static void copyList(List<Integer> dest,List<Integer> src){
for(int v:src)
dest.add(v);
}
}