Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]

 

Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]

 

class Solution(object):
    def combinationSum3(self, k, n):
        """
        :type k: int
        :type n: int
        :rtype: List[List[int]]
        """
        ans = []
        path = []
        if k<=0 or n<=0:
            return ans
        self.comb_helper(k, n, 1, path, ans)
        return ans
    
    def comb_helper(self, k, n, start, path, ans):
        if n<0:
            return
        if n==0 and k==0:
            ans.append(list(path))
            return
        for i in xrange(start, 10):
            path.append(i)
            self.comb_helper(k-1, n-i, i+1, path, ans)
            path.pop()