@ 代码随想录算法训练营第4周(C语言)|Day24(回溯)
Day21、二叉树(包含题目 ● 77. 组合 )
77. 组合
题目描述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
题目解答
int **ans;
int *path;
int anslenth;
int pathlength;
void bfs(int n,int k,int startindex){
if(pathlength==k){
int *temp=(int*)malloc(sizeof(int)*k);
for(int i=0;i<k;i++){
temp[i]=path[i];
}
ans[anslenth++]=temp;
return;
}
int i=startindex;
for(;i<=n;i++){
path[pathlength++]=i;
bfs(n,k,i+1);
pathlength--;
}
}
int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {
ans=(int**)malloc(sizeof(int*)*100000);
path=(int*)malloc(sizeof(int)*k);
anslenth=0;
pathlength=0;
int startindex=1;
bfs(n,k,1);
*returnColumnSizes=(int*)malloc(sizeof(int)*anslenth);
for(int i=0;i<anslenth;i++){
(*returnColumnSizes)[i]=k;
}
*returnSize=anslenth;
return ans;
}
题目总结
回溯经典题目。