LeetCode77. 组合Golang版
1. 问题描述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
2. 思路
回溯模板题
3. 代码
func combine(n int, k int) [][]int {
var res [][]int
var path []int
backtracking(n, k, 1, path, &res)
return res
}
func backtracking(n int, k int, startIndex int, path []int, res *[][]int) {
if len(path) == k {
// 不copy的话,每一层都是同一个地址,打印[[1,4],[1,4],[1,4],[2,4],[2,4],[3,4]]
temp := make([]int, len(path))
copy(temp, path)
*res = append(*res, temp)
return
}
for i := startIndex; i <= n; i++ {
path = append(path, i)
backtracking(n, k, i + 1, path, res)
path = path[:len(path) - 1]
}
}