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

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

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

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

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

216. 组合总和 III-----回溯篇4

回溯算法:组合总和