代码随想录算法训练营第二十四天 | 77. 组合

  1. 组合

已解答
中等
相关标签

相关企业
给定两个整数 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
回溯的思路, 转化为树型来理解, 参数不确定可以后续补充

固定的模板

id backtraking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}

func combine(n int, k int) [][]int {
var res [][]int
var trace []int
var backtrace func(k int, start int)
backtrace = func(k, start int) {
if k == 0 {
res = append(res, append([]int{}, trace...))
return
}
if start == n {
return
}
for i := start; i < n; i++ {
trace = append(trace, i+1)
backtrace(k-1, i+1)
trace = trace[:len(trace)-1]
}
}
backtrace(k, 0)
return res
}

posted @   勉g  阅读(4)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示