leetcode (17) - Letter Combinations of a Phone Number

来源:互联网 发布:迷你小钢炮淘宝地址 编辑:程序博客网 时间:2024/06/08 00:38

因为不知道digits的长度到底是多少,不可能写无数个for循环来遍历,只能使用递归。

void getLetterCom(char** res,char* digits,char* tmp,int index,char map[10][5],int *top){    int i,digit=digits[index]-'0';char* letters;    if(digits[index]==0){        letters=(char*)malloc(sizeof(char)*index);        tmp[index]=0;strcpy(letters,tmp);printf("%s", tmp);        res[*top]=letters;(*top)++;        return;    }        for(i=0;map[digit][i];i++){        tmp[index]=map[digit][i];      //  printf("%c,", tmp[index]);        getLetterCom(res,digits,tmp,index+1,map,top);        }}char** letterCombinations(char* digits, int* returnSize) {     // number 0-9 char map[10][5]={" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};      char** res,*tmp;     int num=1,length=0,top=0;          //计算一共有多少种可能,然后malloc     while(digits[length]){         if(digits[length]=='0' || digits[length]=='1')continue;         else if(digits[length]=='7' || digits[length]=='9')num*=4;         else num*=3;         length++;     }          res=(char**)malloc(sizeof(char*)*num);     if(length==0){         *returnSize=0;         return res;     }          tmp=(char*)malloc(sizeof(char)*length);     getLetterCom(res,digits,tmp,0,map,&top);     *returnSize=top;     return res;}






0 0
原创粉丝点击