给定电话号码,输出其对应键盘代表的所有字母组合。如:给定号码5869872,输出jtmwtpa、jtmwtpb..... #include <stdio.h> #include <string.h> //键盘映射 char keyboard[10][5] = { "", //0 "", //1 "abc", //2 "def", //3 "ghi", //4 "jkl", //5 "mno", //6 "pqrs", //7 "tuv", //8 "wxyz" //9 }; int keysize[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4}; //递归实现 void TranslateToWord(char *number, int *answer, int index, int len) { if(index == len) { for(int i = 0; i < len; i++) printf("%c", keyboard[number[i] - 48][answer[i]]); printf("/n"); return; } for(answer[index] = 0; answer[index] < keysize[number[index] -48]; answer[index]++) TranslateToWord(number, answer, index + 1, len); } //非递归实现 /*int TranslateToWord(char *number, int *answer, int len) { int count = 0; while(true) { for(int i = 0; i < len; i++) printf("%c", keyboard[number[i] - 48][answer[i]]); printf("/n"); count++; int k = len-1; while(k >= 0) { if(answer[k] < keysize[number[k] - 48] -1) { answer[k]++; break; } else { answer[k] = 0; k--; } } if(k < 0) break; } return count; }*/ void main() { char number[] = "586"; int len = strlen(number); int *answer = new int[len]; for(int i = 0; i < len; i++) answer[i] = 0; TranslateToWord(number, answer, 0, len); //递归 //printf("total:%d/n", TranslateToWord(number, answer, len)); //非递归 }