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:
?
For example, given candidate set?2,3,6,7?and target?7,?
A solution set is:?[7]?[2, 2, 3]?
?
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
List<List<Integer>> list = new ArrayList<List<Integer>>();
List<Integer> l = new ArrayList<Integer>();
list.add(l);
return solve(list, candidates, target, 0);
}
private List<List<Integer>> solve(List<List<Integer>> list,
int[] candidates, int target, int pos) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (pos == candidates.length) {
if (target == 0) {
return list;
}
return res;
}
for (int i = 0; i*candidates[pos] <= target; i++) {
List<List<Integer>> newlist = new ArrayList<List<Integer>>();
for (List<Integer> l : list) {
List<Integer> nl = new ArrayList<Integer>(l);
for (int j = 1; j <= i; j++) {
nl.add(candidates[pos]);
}
newlist.add(nl);
}
res.addAll(solve(newlist, candidates, target-i*candidates[pos], pos+1));
}
return res;
}
}
?
原文:http://hcx2013.iteye.com/blog/2218642