[回溯算法]leetcode216. 组合总和 III(c实现)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[回溯算法]leetcode216. 组合总和 III(c实现)相关的知识,希望对你有一定的参考价值。
题目
代码
int *path;
int pathTOP;
int**ans;
int ansTOP;
void backtracking(int targetsum,int k,int sum,int satrtindex)
int i =0;
if(sum> targetsum)//剪枝操作
return;
if(k==pathTOP)
if(sum == targetsum)
int *temp=(int*)malloc(sizeof(int)*k);
for(i=0;i<k;i++)
temp[i]=path[i];
ans[ansTOP++]=temp;
return;
for(i=satrtindex;i<=9-(k-pathTOP)+1;i++)
sum+=i;
path[pathTOP++]=i;
backtracking( targetsum,k,sum,i+1);
sum-=i;
pathTOP--;
int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes)
path=(int*)malloc(sizeof(int)*k);
ans=(int**)malloc(sizeof(int*)*10000);
pathTOP=0;
ansTOP=0;
int sum=0;
backtracking(n,k,sum,1);
*returnSize=ansTOP;
*returnColumnSizes=(int*)malloc(sizeof(int)*(*returnSize));
int i=0;
for(i=0;i<(*returnSize);i++)
(*returnColumnSizes)[i]=k;
return ans;
过程分析
设置在外层return返回的原因
正确传入
剪枝操作
1.
2.
剪枝操作范围的确定
1.
2.
3.
4.
以上是关于[回溯算法]leetcode216. 组合总和 III(c实现)的主要内容,如果未能解决你的问题,请参考以下文章