您的位置:首页 > 其它

小白笔记----------------------------------------leetcode(40. Combination Sum II )

2017-11-22 17:19 381 查看
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]
]
这一题与之前的问题1来说, 只是不能重复使用数,所以在递归的时候i+1,而且因为有相同的数,为了规避这种情况引发的多个相同的解,要再遇到同样的数的时候跳过。
class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {

Arrays.sort(candidates);
List<List<Integer>> result = new ArrayList();
backtrack(result,new ArrayList<Integer>(),candidates,target,0);
return result;
}
public void backtrack(List<List<Integer>> result,List<Integer> list,int[] candidates,int target,int start){
if(target == 0){
result.add(new ArrayList(list));
}
if(target > 0){
for(int i = start;i < candidates.length && target >= candidates[i];i++){
if (i > start && candidates[i] == candidates[i - 1]){//如果是相同的数就可能引发同样的结果,所以将这种情况跳过
continue;
}
list.add(candidates[i]);
backtrack(result,list,candidates,target- candidates[i],i+1);
list.remove(list.size()-1);
}
}

}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: