面试题 16.20. T9键盘-力扣双百代码
2023-09-14 09:06:49 时间
面试题 16.20. T9键盘-力扣双百代码
在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示:
示例 1:
输入: num = “8733”, words = [“tree”, “used”]
输出: [“tree”, “used”]
示例 2:
输入: num = “2”, words = [“a”, “b”, “c”, “d”]
输出: [“a”, “b”, “c”]
解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char checkNumber(char ch){
char re = '0';
switch (ch) {
case 'a':
case 'b':
case 'c':re = '2';break;
case 'd':
case 'e':
case 'f':re = '3';break;
case 'g':
case 'h':
case 'i':re = '4';break;
case 'j':
case 'k':
case 'l':re = '5';break;
case 'm':
case 'n':
case 'o':re = '6';break;
case 'p':
case 'q':
case 'r':
case 's':re = '7';break;
case 't':
case 'u':
case 'v':re = '8';break;
case 'w':
case 'x':
case 'y':
case 'z':re = '9';break;
}
return re;
}
void mystrcpy(char **s1,char **s2){
*s1=*s2;
}
char** getValidT9Words(char* num, char** words, int wordsSize, int* returnSize){
int size=0;
for(int i=0;i<wordsSize;i++){
int j;
for( j=0;words[i][j]!='\0';j++){
if(checkNumber(words[i][j])!=num[j]){
break;
}
}
if(words[i][j]=='\0'){
if(size!=i)
mystrcpy(words+size,words+i);
size++;
}
}
*returnSize=size;
return words;
}