參考資訊:
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;
}