包装袋设计网站推荐,东莞建设工程检测中心网站,无锡营销型网站建站,企业注册官网入口文章目录 一、题目二、C# 题解 一、题目 在老式手机上#xff0c;用户通过数字键盘输入#xff0c;手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列#xff0c;实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射… 文章目录 一、题目二、C# 题解 一、题目 在老式手机上用户通过数字键盘输入手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示 示例 1: 输入: num “8733”, words [“tree”, “used”] 输出: [“tree”, “used”] 示例 2: 输入: num “2”, words [“a”, “b”, “c”, “d”] 输出: [“a”, “b”, “c”] 提示
num.length 1000words.length 500words[i].length num.lengthnum 中不会出现 0, 1 这两个数字 点击此处跳转题目。
二、C# 题解 题目还好一个一个匹配就是了。用队列存储中间满足匹配的单词同时使用 Match 函数判断匹配而不是建立 Map 判断映射关系这样会快一点。
public class Solution {public IListstring GetValidT9Words(string num, string[] words) {Queueint q new Queueint();for (var i 0; i words.Length; i) // 将第一个字母匹配的单词进入队列if (Match(num[0], words[i][0]))q.Enqueue(i);for (var i 1; i num.Length; i) { // 在已匹配的单词里面循环匹配int cnt q.Count;while (cnt-- 0) {int wi q.Dequeue();if (Match(num[i], words[wi][i])) q.Enqueue(wi);}}return q.Select(i words[i]).ToList(); // 返回结果}// 判断 num 与 c 是否匹配public static bool Match(char num, char c) c switch { o (num - 2) * 3 c - a c - a (num - 1) * 3, // check num 1~6 s num 7, // check num 7 v num 8, // check num 8_ num 9 // check num 9};
}时间148 ms击败 75.00% 使用 C# 的用户内存46.18 MB击败 75.00% 使用 C# 的用户