题目
给一个set 和 一个target 。set中元素只能用一次,加起来得到target的集合。
代码
public class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
int start=0;
Arrays.sort(candidates);
useme(ans,temp,target,start,candidates);
return ans;
}
public void useme(List<List<Integer>> ans , List<Integer> temp, int target,int start,int[] candidates){
if(target == 0){
ans.add(new ArrayList<Integer>(temp));
return;
}
for(int i=start;i<candidates.length;i++){
int cur = candidates[i];
if(i!=start && cur == candidates[i-1]){
continue;
}
if(target-cur < 0){
return;
}
temp.add(cur);
useme(ans,temp,target-cur,i+1,candidates);
temp.remove(temp.size()-1);
}
}
}
在前一题的基础上,坐标的改变和元素重复的判断。
不过知道原理情况下,很容易完成。