package com.anuragkapur.leetcode;
import java.util.ArrayList;
import java.util.List;
/**
* @author anuragkapur
*/
public class CombinationSumIII {
private List<List<Integer>> combinations;
/**
* Running time: O(k)
* @param k
* @param n
* @return
*/
public List<List<Integer>> combinationSum3(int k, int n) {
if(k <= 0 || n <= 0) {
return null;
}
combinations = new ArrayList<>();
computeCombination(k, n, new ArrayList<>());
return combinations;
}
private void computeCombination(int k, int n, List<Integer> combinationInTheMaking) {
// recursion base case 1
if(k == 0) {
if(n == 0) {
combinations.add(combinationInTheMaking);
} else {
return;
}
}
// recursion base case 1
if(n == 0) {
return;
}
// recusrsive case
int largestSoFar = 0;
if(combinationInTheMaking.size() > 0) {
largestSoFar = combinationInTheMaking.get(combinationInTheMaking.size()-1);
}
for(int i=largestSoFar+1; i<10; i++) {
List<Integer> combinationInTheMakingCopy = new ArrayList<>();
combinationInTheMakingCopy.addAll(combinationInTheMaking);
combinationInTheMakingCopy.add(i);
computeCombination(k-1, n-i, combinationInTheMakingCopy);
}
}
}