C语言字符串细节真多啊,搞了好久。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char c[10][5]={" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
char temp[10];
void dfs(char** array,char* digits,int* returnSize,int index,int cindex,int n){//index是dights下标,cindex->temp
if(index>n) return;
if(digits[index]==0){
for(int i=0;i<n;i++){
array[*returnSize][i]=temp[i];
}
(*returnSize)++;
return;
}
if(digits[index]!=0){
int t=digits[index]-'0';
int x=0;
while(c[t][x]!=0){
temp[cindex]=c[t][x++];
dfs(array,digits,returnSize,index+1,cindex+1,n);
}
}
}
char** letterCombinations(char* digits, int* returnSize) {
*returnSize=0;
int n=0;
while(digits[n]!='\0') n++;
if(n==0) return NULL;
for(int i=0;i<10;i++) temp[i]=0;
char** array=(char**)malloc(sizeof(char*)*1000);
for(int i=0;i<1000;i++) array[i]=(char*)malloc(sizeof(char)*10);
for(int i=0;i<1000;i++){
for(int j=0;j<10;j++){
array[i][j]=0;
}
}
dfs(array,digits,returnSize,0,0,n);
return array;
}
结果: