组合数问题

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;

    }
}
posted @ 2020-09-09 15:22  Muise  阅读(59)  评论(0)    收藏  举报