參考資訊:
https://www.cnblogs.com/grandyang/p/4537983.html
題目:
解答:
#define MAX_SIZE 1000 int dfs(int k, int n, int pos, int *tbuf, int tlen, int **rbuf, int *rlen) { int cc = 0; if (tlen == k) { for (cc = 0; cc < k; cc++) { n -= tbuf[cc]; } if (n == 0) { memcpy(rbuf[*rlen], tbuf, sizeof(int) * k); *rlen += 1; } tlen -= 1; return 0; } for (cc = pos + 1; cc <= 9; cc++) { tbuf[tlen] = cc; tlen += 1; dfs(k, n, cc, tbuf, tlen, rbuf, rlen); tlen -= 1; } return 0; } /** * 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** combinationSum3(int k, int n, int *returnSize, int **returnColumnSizes) { int cc = 0; int len = 0; int **rbuf = NULL; int tbuf[32] = { 0 }; rbuf = malloc(sizeof(int *) * MAX_SIZE); for (cc = 0; cc < MAX_SIZE; cc++) { rbuf[cc] = malloc(sizeof(int) * k); memset(rbuf[cc], 0, sizeof(int) * k); } len = 0; dfs(k, n, 0, tbuf, 0, rbuf, &len); *returnSize = len; *returnColumnSizes = malloc(sizeof(int) * len); for (cc = 0; cc < len; cc++) { (*returnColumnSizes)[cc] = k; } return rbuf; }