216. Combination Sum III

Description

Find all valid combinations of k numbers that sum up to n such that the following conditions are true:

  • Only numbers 1 through 9 are used.

  • Each number is used at most once.

Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.

Constraints

  • 2 <= k <= 9

  • 1 <= n <= 60

Approach

Examples

Input: k = 3, n = 7

Output: [[1, 2, 4]]

Explanation:

1 + 2 + 4 = 7

There are no other valid combinations.

Solutions

/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    public List<List<Integer>> combinationSum3(int k, int n) {
        List<List<Integer>> resultList = new ArrayList();
        helper(n, k, resultList, new LinkedList<Integer>(), 0, 1);
        return resultList;
    }
    
    private void helper(int n,
                        int k,
                        List<List<Integer>> resultList,
                        LinkedList<Integer> currList,
                        int sum,
                        int start) {
        if(currList.size() == k && sum == n) {
            resultList.add(new ArrayList(currList));
            return;
        }
        if(currList.size() < k) {
            for(int j = start; j <= 9; j++) {
                currList.add(j);
                helper(n, k, resultList, currList, sum+j, j+1);
                currList.removeLast();
            }
        }
    }
}

Follow up

Last updated

Was this helpful?