Combination Sum II

Posted binryang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Combination Sum II相关的知识,希望对你有一定的参考价值。

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]
]
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        int length = candidates.length;
        Arrays.sort(candidates);
        List<List<Integer>> results = new ArrayList<>();
        helper(candidates,results,target,0,new ArrayList<>());
        List<List<Integer>> results1 = new ArrayList<>();
        for (List<Integer> result :
                results) {
            if (!results1.contains(result)){
                results1.add(result);
            }
        }
        return results1;
    }

    public void helper(int[] candidates,List<List<Integer>> results,int target,int index,List<Integer> curr){
        if (target==0){
            ArrayList<Integer> item = new ArrayList<>();
            item.addAll(curr);
            results.add(item);
            return;
        }
        for (int i=index;i<candidates.length;i++){
            if (target>=candidates[i]){
                curr.add(candidates[i]);
                helper(candidates,results,target-candidates[i],i+1,curr);
                curr.remove(curr.size()-1);
            }
        }
    }

以上是关于Combination Sum II的主要内容,如果未能解决你的问题,请参考以下文章

combination-sum-ii(熟悉下Java排序)

Combination Sum & Combination Sum II & Combination Sum III

Combination Sum II

40. Combination Sum II

LeetCode 40 Combination Sum II(数组中求和等于target的所有组合)

leetcode-Combination Sum II-40