77. 组合
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的k个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:
输入:n = 1, k = 1
输出:[[1]]
提示:
- 1 <= n <= 20
- 1 <= k <= n
解题思路
组合类型题目入门题:注意无法取足k个数时的剪枝技巧即可
i <= n - (k - len(*path)) + 1
Go代码
func combine(n int, k int) [][]int {
res := make([][]int,0)
path := make([]int,0)
backtracing(n,k,&res,&path,1)
return res
}
func backtracing(n int,k int,res *[][]int,path *[]int,startIndex int) {
if len(*path) == k {
// 需要添加的是path的副本,注意如下添加副本技巧
*res = append(*res,append([]int(nil),*path...))
return
}
for i := startIndex;i <= n - (k - len(*path)) + 1;i++ {
*path = append(*path,i)
backtracing(n,k,res,path,i + 1)
*path = (*path)[0:len(*path) - 1] // 回溯,撤销结果
}
}

543

被折叠的 条评论
为什么被折叠?



