216. 组合总和 III
题目链接
解
/*** 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().*/void backtrack(int k, int n, int *returnSize, int **array, int idx, int *tmp, int start) {if (idx == k) {if (n == 0) {for (int i = 0; i < k; i++) {array[*returnSize][i] = tmp[i];}(*returnSize)++;}return;}for (int i = start; i <= 9; i++) {tmp[idx++] = i;backtrack(k, n-i, returnSize, array, idx, tmp, i+1);idx--;}}int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes) {int **array = (int **)malloc(sizeof(int *) * 10000);for (int i = 0; i < 10000; i++) {array[i] = (int *)malloc(sizeof(int) * k);memset(array[i], 0, sizeof(int) * k);}int *tmp = (int *)malloc(sizeof(int) * k);memset(tmp, 0, sizeof(int) * k);*returnSize = 0;backtrack(k, n, returnSize, array, 0, tmp, 1);*returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);for (int i = 0; i < *returnSize; i++) {(*returnColumnSizes)[i] = k;}return array;
}
17. 电话号码的字母组合
题目链接
解
/*** Note: The returned array must be malloced, assume caller calls free().*/char map[][5] = {[0] = "",[1] = "",[2] = "abc",[3] = "def",[4] = "ghi",[5] = "jkl",[6] = "mno",[7] = "pqrs",[8] = "tuv",[9] = "wxyz",
};void backtrack(char *digits, int *returnSize, char **ans, int idx, char *tmp) {if (idx == strlen(digits)) {for (int i = 0; i < idx; i++) {ans[*returnSize][i] = tmp[i];}ans[*returnSize][idx] = 0;(*returnSize)++;return ;}int n = digits[idx] - '0';for (int i = 0; i < strlen(map[n]); i++) {tmp[idx] = map[n][i];backtrack(digits, returnSize, ans, idx+1, tmp); }}char** letterCombinations(char* digits, int* returnSize) {char **ans = (char **)malloc(sizeof(char *) * 1000);int n = strlen(digits);*returnSize = 0;if (n == 0) return NULL;char *tmp = (char *)malloc(sizeof(char) * n+1);memset(tmp, 0, sizeof(char) * n+1);for (int i = 0; i < 1000; i++) {ans[i] = (int *)malloc(sizeof(char) * n+1);memset(ans[i], 0, sizeof(char) * n+1);}backtrack(digits, returnSize, ans, 0, tmp);return ans;
}