1.题目
![]()
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> r=new ArrayList<>();
HashSet<List<Integer>> s=new HashSet<>();
Arrays.sort(candidates);
dfs(candidates,target,new ArrayList<Integer>(),s);
return new ArrayList<List<Integer>>(s);
}
public int dfs(int[] d,int root,ArrayList<Integer> res, HashSet<List<Integer>> r){
if(root==0){
ArrayList<Integer> temp=(ArrayList<Integer>)res.clone();
Collections.sort(temp);
if(!r.contains(temp))
r.add(temp);
if(res.size()!=0){
res.remove(res.size()-1);
}
return -1;
}
if(root<0){
if(res.size()!=0){
res.remove(res.size()-1);
}
return -1;
}
for(int i : d){
res.add(i);
int flag = dfs(d,root-i,res,r);
if(flag<0) break;
}
if(res.size()!=0){
res.remove(res.size()-1);
}
return 1;
}
}