[回溯]leetcode77. 组合(c实现超详细解析)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[回溯]leetcode77. 组合(c实现超详细解析)相关的知识,希望对你有一定的参考价值。
题目
代码
int* path;
int pathTOP;
int** ans;
int ansTOP;
void backtracking(int n, int k, int startIndex)//n代表总数 ,k代表每个集合中的个数 ,startIndex代表 每次开始的位置
int i = 0;
if (pathTOP == k)//递归终止条件
int* temp = (int*)malloc(sizeof(int) * k);
for (i = 0; i < k; i++)
temp[i] = path[i];//将path中集合内的每个数 传入 临时的temp中
ans[ansTOP++] = temp;//将一个集合传入ans二维数组
return;
int j = 0;
for (j = startIndex; j <=n; j++)//for循环从当前位置遍历
path[pathTOP++] = j;
backtracking(n, k, j + 1);//递归
pathTOP--; // 回溯
//因为我们是通过path_TOP的值来判断递归终止的,若将path_TOP值减一即返回上一层
int** combine(int n, int k, int* returnSize, int** returnColumnSizes)
path = (int*)malloc(sizeof(int) * k);
ans = (int**)malloc(sizeof(int*) * 10000);
ansTOP = 0;
pathTOP = 0;
backtracking(n, k, 1);//假设是1234 即从1开始
*returnSize = ansTOP;//将二维数组的数量传入
*returnColumnSizes = (int*)malloc(sizeof(int) * (*returnSize));
int i = 0;
for (i = 0; i < *returnSize; i++)
(*returnColumnSizes)[i] = k;
return ans;
过程分析
1.整体图
2.为什么不取之前已经用过的红色数字
3.取后的数字为什么删除
4.递归展开图
5.逐步分析
1.
2.
3.
4.
回溯回去后 ,pathTOP--,pathTOP=1
5.
6.
7.
8.
9.
以上是关于[回溯]leetcode77. 组合(c实现超详细解析)的主要内容,如果未能解决你的问题,请参考以下文章