Leetcode 17. Letter Combinations of a Phone Number
发布日期:2025-04-04 22:40:55 浏览次数:14 分类:精选文章

本文共 1439 字,大约阅读时间需要 4 分钟。

字母组合生成的解决方案

这段代码展示了一个用于生成字母组合的C#解决方案,常见于电话按键盘上的字母提示功能。通过将数字映射到对应的字母组合,可以实现类似电话导航系统那样显示连续按键输入后的组合结果。

// 类 Solution 中的代码class Solution {    // 字母组合映射,根据电话键盘布局    string[] mapping = { "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };    // 递归获取字符串组合    void get_string(string &digits, int l, ref vector
ans, ref string x) { if (l == digits.size()) { ans.push_back(x); return; } // 遍历当前数字对应的字母组合 for (auto c : mapping[digits[l] - '2']) { x.push_back(c); get_string(digits, l + 1, ans, x); x.pop_back(); } } // 生成字母组合 vector
letterCombinations(string digits) { vector
ans; if (digits.empty()) return ans; string x = ""; get_string(digits, 0, ans, x); return ans; }}

代码解析

该解决方案主要包括两个部分:mapping 数组和 get_string 函数、letterCombinations 函数。

  • mapping 数组:这是一个字符串数组,包含 12 个字母组合,分别对应常见电话键盘的布局:

    • "abc" 对应 2 错
    • "def" 对应 3 错
    • "ghi" 对应 4 错
    • "jkl" 对应 5 错
    • "mno" 对应 6 错
    • "pqrs" 对应 7 错
    • "tuv" 对应 8 错
    • "wxyz" 对应 9 错
  • get_string 函数:这是一个递归函数,主要负责按键输入的字母组合生成。具体逻辑包括:

    • 当当前索引与输入数字长度相同时,将当前组合添加到结果列表中
    • 对于每个数字,遍历其对应的字母组合
    • 递归处理下一个数字,并在返回时恢复上一层(回溯)
  • letterCombinations 函数:作为解析入口,初始化组合结果列表。如果输入数字为空则直接返回空列表。否则,调用 get_string 函数进行处理,最终返回所有可能的字母组合。

  • 样例使用

    例如,输入 223

    • 2 对应 "abc"
    • 23 对应 "ab", "bc", "cc"合成后的结果为 "ab", "bc", "cc"。

    这种解法通过递归的方式生成所有可能组合,虽然效率较高,但在处理大量组合时可能会出现性能问题。

    上一篇:LeetCode 17. 电话号码的字母组合 java 计算键盘组合字母 给定参数输出键盘字母组合 求键盘字母组合
    下一篇:LeetCode 166. Fraction to Recurring Decimal

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月29日 23时45分22秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章