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