Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
Subscribe to see which companies asked this question
这道题用递归的办法来解决,从第一个数字到最后一个数字对每个数字对应的每个字母进行遍历,遍历到digits末尾也就是'\0'时,保存当前结果。
代码如下:Runtime: 0 ms
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int fun(char *digits,int *returnSize,char **res,char base[][5],char *temp,int k)
{
int i;
int len;
if(digits[k]=='\0')
{
temp[k]='\0';
strcpy(res[*returnSize],temp);
*returnSize=*returnSize+1;
}
else
{
len=strlen(base[digits[k]-'0']);
for(i=0;i<len;i++)
{
temp[k]=base[digits[k]-'0'][i];
fun(digits,returnSize,res,base,temp,k+1);
}
}
return 0;
}
char** letterCombinations(char* digits, int* returnSize) {
int i,len;
char base[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
char *temp;
*returnSize=1;
len=strlen(digits);
if(len==0)
{
*returnSize=0;
return NULL;
}
for(i=0;i<len;i++)
*returnSize=*returnSize*(strlen(base[digits[i]-'0']));
char **res;
res=(char **)malloc(*returnSize*sizeof(char *));
for(i=0;i<*returnSize;i++)
res[i]=(char *)malloc((len+1)*sizeof(char));
temp=(char *)malloc(sizeof(char)*(len+1));
*returnSize=0;
fun(digits,returnSize,res,base,temp,0);
return res;
}