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

商城网站建设讯息wdcp 防盗链 网站不能打开

商城网站建设讯息,wdcp 防盗链 网站不能打开,小程序头条小游戏,厨师培训题目描述 给定两个整数 n 和 k#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按任意顺序返回答案。 示例 示例 1 输入#xff1a; n 4, k 2输出#xff1a; [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]示例 2 输入#xff1a; n 1, k …题目描述 给定两个整数 n 和 k返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按任意顺序返回答案。 示例 示例 1 输入 n 4, k 2输出 [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]示例 2 输入 n 1, k 1输出 [[1]]解题思路 1. 回溯法 回溯法是解决组合问题的经典方法通过递归构建所有可能的组合。 算法步骤 定义一个函数 backtrack(start, path)其中 start 表示搜索的起点path 是当前构建的组合。如果当前组合 path 的长度等于 k将其加入结果集中。遍历从 start 到 n 的所有数字 将当前数字加入组合。递归构建下一个数字的组合。回溯移除当前数字。 回溯法的时间复杂度是 O(C(n, k))其中 C ( n , k ) n ! k ! ( n − k ) ! C(n, k) \frac{n!}{k!(n-k)!} C(n,k)k!(n−k)!n!​。 实现代码 C语言实现 #include stdio.h #include stdlib.h// 动态数组结构 typedef struct {int** data;int size;int capacity; } Array;void initArray(Array* arr, int capacity) {arr-data (int**)malloc(sizeof(int*) * capacity);arr-size 0;arr-capacity capacity; }void addToArray(Array* arr, int* combination, int k) {if (arr-size arr-capacity) {arr-capacity * 2;arr-data (int**)realloc(arr-data, sizeof(int*) * arr-capacity);}arr-data[arr-size] (int*)malloc(sizeof(int) * k);for (int i 0; i k; i) {arr-data[arr-size][i] combination[i];}arr-size; }void backtrack(int n, int k, int start, int* combination, int combSize, Array* result) {if (combSize k) {addToArray(result, combination, k);return;}for (int i start; i n; i) {combination[combSize] i;backtrack(n, k, i 1, combination, combSize 1, result);} }int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {Array result;initArray(result, 16);int* combination (int*)malloc(sizeof(int) * k);backtrack(n, k, 1, combination, 0, result);*returnSize result.size;*returnColumnSizes (int*)malloc(sizeof(int) * result.size);for (int i 0; i result.size; i) {(*returnColumnSizes)[i] k;}free(combination);return result.data; }int main() {int n 4, k 2;int returnSize;int* returnColumnSizes;int** combinations combine(n, k, returnSize, returnColumnSizes);printf(Combinations:\n);for (int i 0; i returnSize; i) {printf([);for (int j 0; j returnColumnSizes[i]; j) {printf(%d, combinations[i][j]);if (j returnColumnSizes[i] - 1) printf(, );}printf(]\n);free(combinations[i]); // 释放每个组合的内存}free(combinations); // 释放结果数组的内存free(returnColumnSizes); // 释放列大小数组的内存return 0; }代码解析 动态数组 使用 Array 结构来动态存储组合结果。initArray 初始化数组addToArray 动态增加组合。 回溯函数 backtrack 函数递归构建所有可能的组合。使用 start 控制数字范围避免重复组合。 主函数 combine 是主函数调用回溯并返回结果。动态分配 returnColumnSizes 以存储每个组合的列数。 内存管理 在主函数中释放动态分配的内存避免内存泄漏。 时间复杂度和空间复杂度 时间复杂度 回溯构造所有组合的复杂度是 O(C(n, k))即 n ! k ! ( n − k ) ! \frac{n!}{k!(n-k)!} k!(n−k)!n!​。 空间复杂度 临时数组 combination 的空间复杂度为 O(k)。存储结果的空间复杂度为 O ( C ( n , k ) ⋅ k ) O(C(n, k) \cdot k) O(C(n,k)⋅k)。
http://www.w-s-a.com/news/716092/

相关文章:

  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置
  • 企业网站建设费是无形资产吗佛山网站建设哪个好点
  • 网站建设就业方向国开行网站毕业申请怎么做
  • 创建一个网站的费用wordpress 4.0 安装
  • 会员登录系统网站建设dw软件是做什么用的
  • 手机网站被做跳转长沙网上购物超市
  • 网站建设中网站需求分析设计网站推荐html代码
  • 容易收录的网站台州汇客网站建设
  • 企业网站源码百度网盘下载网站备案号如何查询密码
  • 个人网站建设课程宣传栏制作效果图
  • 自己做的网站能上传吗网上做彩票网站排名
  • 教育培训网站模板下载自己做商务网站有什么利弊
  • 平面设计公司网站兰州室内设计公司排名
  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗
  • 网站开发 专有名词pc网站建设和推广
  • 上海部道网站 建设conoha wordpress
  • 手机测评做视频网站宝塔可以做二级域名网站么
  • 代理公司注册济南重庆seo优化效果好
  • 佛山市骏域网站建设专家徐州网站建设价格
  • 公司做网站多济南好的网站建设公司排名
  • 网站维护的方式有哪几种该网站在工信部的icp ip地址