package com.anuragkapur.leetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author anuragkapur */ public class CombinationSum { List<List<Integer>> combinations; public List<List<Integer>> combinationSum(int[] candidates, int target) { if(candidates == null || candidates.length < 1) { return null; } Arrays.sort(candidates); combinations = new ArrayList<>(); compute(candidates, 0, target, new ArrayList<>()); return combinations; } private void compute(int[] candidates, int startIndex, int target, List<Integer> combination) { if(target == 0) { // recursion base case combinations.add(combination); } if(target < 0) { // recursion base case return; } for(int i=startIndex; i<candidates.length; i++) { List<Integer> combinationCopy = new ArrayList<>(); combinationCopy.addAll(combination); combinationCopy.add(candidates[i]); compute(candidates, i, target-candidates[i], combinationCopy); } } }