/**
* 算法思想:
* 套用回溯算法框架
*
*
*/
void get_one_ret(int *stack, int len, int target, int **ret, int *ret_index) {
int cnt = 0;
int i=0;
while(i<len){
cnt += stack[i];
i++;
}
/* sum of numbers is not target, return directly */
if(cnt != target) return;
ret[*ret_index] = (int *)malloc(sizeof(int) * len);
memcpy(ret[*ret_index], stack, sizeof(int) * len);
(*ret_index)++;
}
void rec(int len, int target, int last,int *stack, int index, int **ret, int *ret_index) {
int i;
if(index > len) return;
/* there are len numbers in stack, so try to get one result */
if(index == len){
get_one_ret(stack, len, target, ret, ret_index);
return;
}
/* try to set num from last+1 to 9, because last used num is last,
* we can't use it again, so try next one.
*/
for(i=last+1; i<=9; i++) {
stack[index] = i;
rec(len, target, i, stack, index+1, ret, ret_index);
}
}
#define LEN 0xffff
int** combinationSum3(int len, int target, int* returnSize, int** returnColumnSizes){
int **ret = (int **)malloc(sizeof(int) * LEN);
int *rcs = (int *)malloc(sizeof(int) * LEN);
int ret_index = 0;
int arr[len];
int i;
rec(len, target, 0, arr, 0, ret, &ret_index);
for(i=0; i<ret_index; i++){
rcs[i] = len;
}
*returnSize = ret_index;
*returnColumnSizes = rcs;
return ret;
}
LeetCode-216-组合总和III-C语言
最新推荐文章于 2023-03-20 19:34:38 发布