/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
//定义路径
int* path;
int pathSize;
//定义一个二维数组记录结果
int** ans;
int ansSize;
//记录满足条件的path数组长度
int* length;
//回溯算法
void backtracking(int *candidates,int target,int candidatesSize,int index,int sum){
//返回条件
if(sum >= target){
if(sum == target){
int *tmp = (int*)malloc(sizeof(int) * pathSize);
for(int i = 0;i < pathSize;i++){
tmp[i] = path[i];
}
ans[ansSize] = tmp;
length[ansSize++] = pathSize;
}
return;
}
for(int j = index;j < candidatesSize;j++){
//处理
sum+=candidates[j];
path[pathSize++] = candidates[j];
//递归
backtracking(candidates,target,candidatesSize,j,sum);
//回溯弹出
sum-=candidates[j];
pathSize--;
}
}
int** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes){
//初始化变量
path = (int*)malloc(sizeof(int) * 50);
ans = (int**)malloc(sizeof(int*) * 200);
length = (int*)malloc(sizeof(int) * 200);
pathSize = 0;
ansSize = 0;
//回溯
backtracking(candidates,target,candidatesSize,0,0);
//返回数组大小
*returnSize = ansSize;
*returnColumnSizes = (int*)malloc(sizeof(int) * ansSize);
for(int i = 0;i < ansSize;i++){
(*returnColumnSizes)[i] = length[i];
}
return ans;
}
LeetCode:39. 组合总和
最新推荐文章于 2024-10-07 07:09:00 发布
该代码实现了一个回溯函数`backtracking`,用于在给定数组`candidates`中找到所有和为目标值`target`的组合。它通过递归遍历数组,动态调整路径`path`并记录结果到二维数组`ans`。同时,还管理了路径的长度和返回数组的大小。最后,函数返回了结果数组的大小和列尺寸。
摘要由CSDN通过智能技术生成