zl程序教程

您现在的位置是:首页 >  其他

当前栏目

面试题 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;



}