LeetCode第四十题-求组合所有可能性(2)

Combination Sum II

问题简介:给定一个数组和一个目标值,找到数组中元素可以组成目标值所有组合
注:
1.所有数字(包括目标)都是正整数
2.解决方案集合不得包含重复的组合
3.数组中每个元素在结果集里只能使用一次
举例:
1:
输入: candidates = [10,1,2,7,6,1,5], target = 8,
结果:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]
2:
输入: candidates = [2,5,2,1,2], target = 5,
结果:
[
[1,2,2],
[5]
]
解法一:
和上一题思路类似,先将数组排序,利用递归寻找结果,保证数组candidates中元素不重复使用在于递归时将传递的索引+1即可,判断

class Solution {
    public List> combinationSum2(int[] candidates, int target) {
       Set> result = new HashSet<>();
       int length = candidates.length;
       Arrays.sort(candidates);
       if(length == 0||candidates[0]> target){
           return new ArrayList();
       }
        recursion(0,candidates,target,new ArrayList(),result);
        return new ArrayList(result);
    }
    public void recursion(int index,int [] candidates,int target,
    List temp ,Set> result){
        if(target == 0){
            result.add(temp);
            return;    
        }                     
        for(int i = index;i list = new ArrayList<>(temp);
                list.add(candidates[i]);
                recursion(i+1,candidates,target-candidates[i],list,result);
            }else break;
        }
    }
}

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

你可能感兴趣的:(leetcode)