标签:高效 cat int array .com ber list number tar
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. Each number in C may only be used once in the combination. Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations. For example, given candidate set [10, 1, 2, 7, 6, 1, 5] and target 8, A solution set is: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
比39. Combination Sum多了个从下一位递归而已
public List<List<Integer>> combinationSum2(int[] num, int target) {
// write your code here
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
//List<Integer> list = new ArrayList<Integer>();
if (candidates.length == 0) {
return res;
}
Arrays.sort(candidates);
helper(res, new ArrayList<Integer>(), candidates, target, 0);
return res;
}
private void helper(List<List<Integer>> res, List<Integer> list,
int[] num, int target, int pos) {
if (target == 0) {
res.add(new ArrayList<Integer>(list));
return;
}
for (int i = pos; i < num.length; i++) {
if (num[i] > target || i != pos && num[i] == num[i - 1]) {
continue;
}
list.add(num[i]);
helper(res, list, num, target - num[i], i + 1);
list.remove(list.size() - 1);
}
}
利用排序的性质 提高效率
if (num[i] > target || i != pos && num[i] == num[i - 1]) {
continue;
}标签:高效 cat int array .com ber list number tar
原文地址:http://www.cnblogs.com/apanda009/p/7236005.html