当前位置: 首页 > ds >正文

LeetCode 第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
void backTracking(int n, int k, int startIndex, int* returnSize, int* count, int* path, int** result){// 当path里元素数量等于指定的k,说明找到一个集合,将其添加到result中,并返回if((*count) == k){result[*returnSize] = (int*)malloc(sizeof(int) * k);for(int i = 0; i < k; i++){result[*returnSize][i] = path[i];}(*returnSize)++;return;}/*剪枝前:i <= n剪枝后:i <= n - (k - *count) + 1我们的目标是找到每一条路径,因此path里的元素一定为k,而我们是从i向后顺序遍历的,这就要求i后面的元素至少要有 k-*count 个元素,即最多遍历到 n-(k-*count)+1(包括i) ,就不需要往后遍历了,因为后续元素不足了*/// 遍历给定的数组,以startIndex作为起始元素,防止出现出现重复集合for(int i = startIndex; i <= n - (k - *count) + 1; i++){// 每遍历到一个元素,将其加入pathpath[(*count)++] = i;// 递归调用函数backTracking(n, k, i + 1, returnSize, count, path, result);// 回溯,将path数组的最上层元素弹出(*count)--;}
}
int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {// result存储所有集合int** result = (int**)malloc(sizeof(int*) * 200000);// path存储单一集合int* path = (int*)malloc(sizeof(int) * k);// 初始集合数量为0*returnSize = 0;// startIndex为每次遍历的起始元素,count是path数组里的元素数量int startIndex = 1, count = 0;// 调用回溯函数backTracking(n, k, startIndex, returnSize, &count, path, result);// returnColumnSizes记录所有集合的大小,并全部赋值k*returnColumnSizes = (int*)malloc(sizeof(int) * (*returnSize));for(int i = 0; i < *returnSize; i++){(*returnColumnSizes)[i] = k;}// 返回结果return result;
}///https://leetcode.cn/problems/combinations/solutions/3081998/cyu-yan-hui-su-jian-zhi-hou-fu-xiang-xi-5d66c/

代码随想录(参考)

http://www.xdnf.cn/news/14608.html

相关文章:

  • SimpleQtLogger 使用总结
  • 深入理解滑动窗口算法:原理、应用与 C++ 实现
  • C# 事件详解
  • React组件通信——发布订阅(pub/sub)
  • 紧急救援!Ubuntu崩溃修复大赛
  • 在Qt中使用OpenGL显示大量点(点云)
  • 136. 只出现一次的数字
  • 算法题(力扣每日一题)—改变一个整数能得到的最大差值
  • Arthas 全面学习指南
  • 动手实践:LangChain流图可视化全解析
  • [从0到1]环境准备--anaconda与pycharm的安装
  • Linux系统firewall-offline-cmd命令在企业网络安全防护中的应用案例分析
  • 图形编辑器基于Paper.js教程29:基于图层的所有矢量图元的填充规则实现
  • 【C++】list容器实现
  • Lighthouse与首屏优化
  • 【看到哪里写到哪里】如何在C中使用多进程设计(1)
  • STM32 开发 - STM32CubeMX 下载芯片支持包、创建 HAL 库工程
  • 牙科医疗设备EMC电磁兼容技术讨论
  • 数列的极限
  • 推荐标注数据标注
  • 【精选】计算机毕业设计基于SpringBoot高校社团管理系统 社团信息维护 活动发布报名 成员审核与公告发布平台源码+论文+PPT+讲解
  • Git(三) Git 分支工作流管理模型探究与实践
  • 电容篇---常见作用
  • Apache Iceberg与Hive集成:分区表篇
  • StarRocks Community Monthly Newsletter (May)
  • JavaScript中Date对象用法详解
  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • 「Linux文件及目录管理」文件及目录操作类命令
  • Grdle版本与Android Gradle Plugin版本, Android Studio对应关系
  • OpenWrt:交叉编译openssl