[leetcode] combination sum

Given a set of candidate numbers (C) (without duplicates) and a target number (T),
find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
For example, given candidate set [2, 3, 6, 7] and target 7,
A solution set is:
[
[7],
[2, 2, 3]
]

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public static List<List<Integer>> combinationSum(int[] candidates, int target) {
    List<List<Integer>> lists = new LinkedList<>();
    List<Integer> list = new LinkedList<>();
    find(candidates, 0, target, list, lists);
    return lists;
    }
    public static void (int[] candidates, int start, int target, List<Integer> list, List<List<Integer>> lists) {
    if (target < 0) {
    return;
    }
    if (target == 0) {
    lists.add(new LinkedList<>(list));
    return;
    }
    for (int i = start; i < candidates.length; i++) {
    if (candidates[i] <= target) {
    list.add(candidates[i]);
    find(candidates, i, target - candidates[i], list, lists);
    list.remove(list.size() - 1);
    }
    }
    }