我们知道,九宫格键盘中,每个数字键对于几个英文字母,比如2可以代表A,B,C,那么给出一串数字序列,求出所有可能的英文序列。
当数字序列不多时,这个问题使用循环即可解决,那么当序列长达11位呢?
//电话号码对应英文单词
#include <stdio.h>
void RecursiveSearch(int* number, int* answer, int index, int n) {
char c[10][10] = {
"", //0
"", //1
"ABC", //2
"DEF", //3
"GHI", //4
"JKL", //5
"MNO", //6
"PQRS", //7
"TUV", //8
"WXYZ", //9
};
int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4}; //各个数字键能代表的字符总数
if(index == n) {
for(int i = 0; i < total[index]; i++) {
printf("%c", c[number[i]][answer[i]]);
}
printf("\n");
return;
}
for(answer[index] = 0; answer[index] < total[number[index]]; answer[index]++) {
RecursiveSearch(number, answer, index + 1, n);
}
}
int main() {
int number[3] = {2, 5, 3}; //存储电话号码
int answer[3]; //数组目前所代表的字符在其能代表的字符集的位置
RecursiveSearch(number, answer, 0, 3);
return 0;
}