go语言刷题:77. 组合
程序员文章站
2024-03-23 10:35:28
...
申明:本文只用做自己的学习记录
题目
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
代码
func combine(n int, k int) [][]int {
//初始化相关变量
result := [][]int{}
temp := []int{}
start := 1
//判断当k==0或者n==0的情况时,临界条件
if k == 0 || n == 0 {
return result
}
//回溯函数
BackTrack(n, k, start, temp, &result)
return result
}
func BackTrack(n int, k int, start int, temp []int, result *[][]int) {
//设置回溯算法结束条件
//当中间变量长度为k时,加入结果列表
if len(temp) == k {
current := make([]int, len(temp))
copy(current, temp)
*result = append(*result, current)
}
//进行遍历
for i := start; i <= n; i++ {
//扩充进中间切片里
temp = append(temp, i)
//回溯函数
BackTrack(n, k, i+1, temp, result)
//恢复到上一步状态
temp = temp[:len(temp)-1]
}
}