77. 组合

81 阅读1分钟

题目:
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。
解法:
回溯法

var ans [][]int
func combine(n int, k int) [][]int {
    ans = make([][]int, 0)
    nums := make([]int, k)
    backtracking(nums, 0, 1, n, k)
    return ans
}

func backtracking( nums []int, count, pos, n, k int) {
    if count == k {
        arr := make([]int, k)
        for i, num := range nums {
            arr[i] = num
        }
        ans = append(ans, arr)
        return
    }
    for i := pos; i <= n; i ++ {
        nums[count] = i  
        // 注意这里是i + 1
        backtracking(nums, count + 1, i + 1, n, k)
    }
}