diff options
| author | Steve Lee <me@xiangyangli.com> | 2018-01-13 05:13:14 +0800 |
|---|---|---|
| committer | Steve Lee <me@xiangyangli.com> | 2018-01-13 05:13:14 +0800 |
| commit | a46ec300092c1ee8ccac629b7f335643f87662f5 (patch) | |
| tree | b03e20d905e6f583df626386164daf4aa5f81519 /Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c | |
| parent | 79a9c52fa923fc78074d88463449a8b7f95ca3ef (diff) | |
| download | 42-a46ec300092c1ee8ccac629b7f335643f87662f5.tar.xz 42-a46ec300092c1ee8ccac629b7f335643f87662f5.zip | |
update
Diffstat (limited to 'Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c')
| -rw-r--r-- | Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c b/Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c new file mode 100644 index 0000000..eeabd21 --- /dev/null +++ b/Computer_Science/leetcode/17-letter_combinations_of_a_phone_number.c @@ -0,0 +1,46 @@ +/** + * Return an array of size *returnSize. + * Note: The returned array must be malloced, assume caller calls free(). + */ +void helper(char **result, char *map[10], char *digits, char *tmp, int index, int *returnSize) +{ + char *p = map[*digits - '0']; + for(; *p; ++p) { + tmp[index] = *p; + helper(result, map, digits + 1, tmp, index + 1, returnSize); + } + if(*digits == '\0') { + *(result + *returnSize) = malloc(sizeof(char) * index + 1); + for(int i = 0; i < index; i++) { + *(*(result + *returnSize) + i) = tmp[i]; + } + *(*(result + *returnSize) + index) = '\0'; + ++*returnSize; + } +} +char** letterCombinations(char* digits, int* returnSize) { + int len = strlen(digits); + int index = 0; + char tmp[len + 1]; + char **result = malloc(sizeof(int *) * 100); + char *map[10] = { + " ", " ", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" + }; + + *returnSize = 0; + + if(len < 1) + return result; + + while(*digits) { + if(*digits >= '2' && *digits <= '9') { + helper(result, map, digits, tmp, index, returnSize); + } else { + *returnSize = 0; + break; + } + ++digits; + } + + return result; +} |
