LeetCode 77. 组合
可视化图解算法61:组合
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
输入:n = 1, k = 1
输出:[[1]]
提示:
1 <= n <= 20
1 <= k <= n
对于组合问题,可以通过回溯算法完成。
如果文字描述的不太清楚,你可以参考视频的详细讲解:B站@好易学数据结构
3. 编码实现
核心代码如下:
var (
result [][]int //结果集
path []int //路径
)
func combine(n int, k int) [][]int {
result = make([][]int, 0)
path = make([]int, 0)
backtracking(n, k, 1)
return result
}
func backtracking(n int, k int, start int) {
// 2.递归终止条件:分枝进入结尾,找到一种组合( k 减到了 0,说明找到了一个有效的组合)
if k == 0 {
//2.1 存放结果
tmp := make([]int, len(path))
copy(tmp, path)
result = append(result, tmp)
//2.2 返回
return
}
//1.选择:在本层集合中遍历元素
for i := start; i <= n; i++ {
//1.1 处理节点( 将当前数字添加到路径中)
path = append(path, i)
// 1.2 递归(递归调用,注意下一个组合从 i+1 开始,因为组合中的数字是不重复的)
backtracking(n, k-1, i+1)
//1.3 回溯,撤销选择(移除当前数字,以便尝试其他组合)
path = path[:len(path)-1]
}
}
具体完整代码你可以参考下面视频的详细讲解。
对于组合问题可以通过回溯算法完成。步骤:在本层集合中遍历元素, 处理节点,将当前数字添加到路径中,k减1;递归调用;回溯,撤销选择(移除当前数字,以便尝试其他组合)。
《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:
✅ 链表
✅ 二叉树
✅ 二分查找、排序
✅ 堆、栈、队列
✅ 回溯算法
✅ 哈希算法
✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:成事不说,遂事不谏,既往不咎。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。