首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >可视化图解算法61:组合

可视化图解算法61:组合

原创
作者头像
用户11589437
修改2025-09-18 16:28:17
修改2025-09-18 16:28:17
170
举报

LeetCode 77. 组合

可视化图解算法61:组合

1. 题目

描述

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:
代码语言:bash
复制
输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]
示例 2:
代码语言:bash
复制
输入:n = 1, k = 1
输出:[[1]]

提示:

  • 1 <= n <= 20
  • 1 <= k <= n

2. 解题思路

对于组合问题,可以通过回溯算法完成。

如果文字描述的不太清楚,你可以参考视频的详细讲解:B站@好易学数据结构

3. 编码实现

核心代码如下:

代码语言:go
复制
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]
  }
}

具体完整代码你可以参考下面视频的详细讲解。

4.小结

对于组合问题可以通过回溯算法完成。步骤:在本层集合中遍历元素, 处理节点,将当前数字添加到路径中,k减1;递归调用;回溯,撤销选择(移除当前数字,以便尝试其他组合)。

《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

✅ 链表

✅ 二叉树

✅ 二分查找、排序

✅ 堆、栈、队列

✅ 回溯算法

✅ 哈希算法

✅ 动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:成事不说,遂事不谏,既往不咎。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
    • 描述
    • 示例 1:
    • 示例 2:
  • 2. 解题思路
  • 4.小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档