void recursion(char * digits, int* returnSize,char** arr,char** map,int cur,char* s,int len){ if (cur >= len){ arr[(*returnSize)] = (char*)calloc(len + 1, sizeof(char)); strcat(arr[(*returnSize)++], s); return; } for (int i = 0; i < strlen(map[digits[cur] - '0']); i++){ s[cur] = map[digits[cur] - '0'][i]; recursion(digits, returnSize, arr, map, cur + 1, s, len); s[cur] = '\0'; } } char ** letterCombinations(char * digits, int* returnSize){ char* map[] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" }; int i, j, len=strlen(digits); *returnSize = 0; if (len==0) return NULL; char* s = (char*)calloc(len+1, sizeof(char)); char** arr = (char**)calloc(1000, sizeof(char*)); recursion(digits, returnSize, arr, map, 0, s,len); return arr; }