Combination Sum

Overview

Medium 1 solution

Categories

ArrayBacktracking
package array.recursive;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

public class CombinationSum {

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<List<Integer>> combinations = new ArrayList<>();
        backtrack(candidates, 0, target, new ArrayDeque<>(), combinations);
        return combinations;
    }

    private void backtrack(int[] candidates, int start, int target, Deque<Integer> deque, List<List<Integer>> combinations) {

        if (target == 0) {
            var combination = new ArrayList<>(deque);
            combinations.add(combination);
            return;
        }

        for (int end = start; end < candidates.length; end++) {
            if (target - candidates[end] < 0) continue;
            deque.addLast(candidates[end]);
            backtrack(candidates, end, target - candidates[end], deque, combinations);
            deque.removeLast();
        }

    }

}