llllmz

导航

17. 电话号码的字母组合c

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;
}

结果:

posted on 2024-03-08 15:55  神奇的萝卜丝  阅读(32)  评论(0)    收藏  举报