llllmz

导航

216. 组合总和 IIIc

/**
 * 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 temp[10];
void dfs(int** array,int k,int n,int* returnSize,int count,int index,int nowsum){
    if(count>k||nowsum>n) return;
    if(count==k && nowsum==n){
        for(int i=0;i<k;i++) array[*returnSize][i]=temp[i];
        (*returnSize)++;
        return;
    }
    if(count==k) return;
    for(int i=index;i<=9;i++){
        temp[count]=i;
        dfs(array,k,n,returnSize,count+1,i+1,nowsum+i);
        temp[count]=0;
    }
}

int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes) {
    *returnSize=0;
    int** array=(int**)malloc(sizeof(int*)*5000);
    for(int i=0;i<5000;i++) array[i]=(int*)malloc(sizeof(int)*k);
    for(int i=0;i<10;i++) temp[i]=0;
    dfs(array,k,n,returnSize,0,1,0);
    int* column=(int*)malloc(sizeof(int)*(*returnSize));
    for(int i=0;i<(*returnSize);i++) column[i]=k;
    *returnColumnSizes=column;
    return array;
}

结果:

posted on 2024-03-07 20:48  神奇的萝卜丝  阅读(16)  评论(0)    收藏  举报