[回溯]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实现超详细解析)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:77. 组合——回溯法,是暴力法?

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解

leetcode77 组合(Medium)