求生之路2怎么做非官方网站,电子商务网站建设员,建wap手机网站,长沙市设计网站公司1. 题目
给定一个仅包含数字 2-9 的字符串#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下#xff08;与电话按键相同#xff09;。注意 1 不对应任何字母。 示例 1#xff1a; 输入#xff1a;digits “23” 输出#…1. 题目
给定一个仅包含数字 2-9 的字符串返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。 示例 1 输入digits “23” 输出[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 示例2 输入digits “” 输出[] 示例 3 输入digits “2” 输出[“a”,“b”,“c”] 提示 0 digits.length 4 digits[i] 是范围 [‘2’, ‘9’] 的一个数字。 2. 编程实现
2.1 思路
如果输入长度为0直接返回没有排列组合如果输入长度是1那么直接就找对应按键上边的字母输出如果输入长度大于1例如是2 两个数字的排列组合 可以定义一个map表把字母与数组做一个关系对应 如
typedef struct {int num;char character[5];
} map_t;map_t map[10] {{0, {}},{1, {}},{3, {a,b,c}},{3, {d,e,f}},{3, {g,h,i}},{3, {j,k,l}},{3, {m,n,o}},{4, {p,q,r,s}},{3, {t,u,v}},{4, {w,x,y,z}},
}2.2 编程实现
#include stdio.h
#include stdlib.h
#include string.htypedef struct {int num;char letters[5];
} map_t;map_t map[10] {{0, {}},{1, {}},{2, {a, b, c}},{3, {d, e, f}},{4, {g, h, i}},{5, {j, k, l}},{6, {m, n, o}},{7, {p, q, r, s}},{8, {t, u, v}},{9, {w, x, y, z}},
};void generateCombinations(char* digits, int index, char* current, char** result, int* count) {if (digits[index] \0) {current[index] \0;result[(*count)] strdup(current);(*count);} else {int digit digits[index] - 0;for (int i 0; i map[digit].num; i) {current[index] map[digit].letters[i];generateCombinations(digits, index 1, current, result, count);}}
}char** letterCombinations(char* digits, int* returnSize) {int len strlen(digits);char** result (char**)malloc(sizeof(char*) * 10000);*returnSize 0;if (len 0) {return result;}char current[5] {0};generateCombinations(digits, 0, current, result, returnSize);return result;
}int main() {char* digits 23; // 你可以修改这里的输入数字字符串int returnSize;char** result letterCombinations(digits, returnSize);for (int i 0; i returnSize; i) {printf(%s\n, result[i]);free(result[i]);}free(result);return 0;
}