/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//定义路径
char* path;
int pathSize;
//定义一个二维数组记录结果
char** result;
int resultSize;
//定义一个二维字符数组保存电话号码的字母
char* letterMap[10] = {
"", //0
"", //1
"abc", //2
"def", //3
"ghi", //4
"jkl", //5
"mno", //6
"pqrs", //7
"tuv", //8
"wxyz", //9
};
//回溯算法
void backtracking(char *digits,int index){
//index记录寻找到第几个按键
//当index等于输入的数字个数,结束递归
if(strlen(digits) == index){
char *tmp = (char*)malloc(sizeof(char) * strlen(digits) + 1);
for(int i = 0;i < strlen(digits);i++){
tmp[i] = path[i];
}
tmp[strlen(digits)] = 0;//字符数组最后均为0
result[resultSize++] = tmp;
return;
}
int digit = digits[index] - '0';//数字字符转换为整型
char *letters = letterMap[digit];//保存该数字代表的字母
//回溯
for(int i = 0; i < strlen(letters);i++) {
path[pathSize++] = letters[i];
backtracking(digits, index+1);
pathSize--;
}
}
char ** letterCombinations(char * digits, int* returnSize){
path = (char*)malloc(sizeof(char) * strlen(digits));
result = (char**)malloc(sizeof(char*) * 500);
pathSize = resultSize = 0;
*returnSize = 0;
if(strlen(digits) == 0)
return result;
//回溯
backtracking(digits, 0);
*returnSize = resultSize;
return result;
}
LeetCode:17. 电话号码的字母组合
最新推荐文章于 2024-07-25 17:54:26 发布