216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。
示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

func combinationSum3(k int, n int) [][]int {
    if k == 0 || n == 0{
        return [][]int{}
    }
    res := [][]int{}
    taken := make(map[int]bool,10)
    tmp := make([]int,k+1)
    var helper func(index int,n int)
    helper = func(index int,n int){
        if index == k+1 {
            if n == 0{
                 t := make([]int,k)
                 copy(t,tmp[1:])
                 res = append(res,t)
            }
            return
        }
    
        for i := tmp[index-1] + 1; i <= 9 ;i++{
            if !taken[i]{
                taken[i] = true
                tmp[index] = i
                helper(index+1,n-i)
                taken[i] = false
            }
        }
    }
    helper(1,n)
    return res
}

你可能感兴趣的:(216. 组合总和 III)