LeetCode热题100 电话号码的字母组合

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:


输入 :digits = "23"
输出 :["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入 :digits = "2"
输出 :["a","b","c"]

提示:

1 <= digits.length <= 4

digits[i] 是范围 ['2', '9'] 的一个数字。

思路

1 使用哈希表存储每个数字代表的字符串。

2 digits的每个数字作为一层dfs,每次挑出字符串中的一个字符出来组成答案。

3 详细见代码。

代码

cpp 复制代码
class Solution {
public:
    // 利用哈希表存储每个数字的字符串
    unordered_map<char, string>mp{
        {'2', "abc"},
        {'3', "def"},
        {'4', "ghi"},
        {'5', "jkl"},
        {'6', "mno"},
        {'7', "pqrs"},
        {'8', "tuv"},
        {'9', "wxyz"},
        };

    vector<string> letterCombinations(string digits) {
        vector<string>ans;
        string res;

        int po = 0; // 遍历第po个位置的字符串
        string s = mp[digits[po]];
        int m = s.size();
        for(int i = 0; i < m; ++i)
        {
            res.push_back(s[i]);
            dfs(digits, res, ans);
            res.pop_back();
        }

        return ans;
    }

    void dfs(string &digits, string &res, vector<string> &ans)
    {
        if(res.size() == digits.size())
        {
            ans.push_back(res);
            return;
        }

        int po = res.size(); // 遍历第po个位置的字符串
        string s = mp[digits[po]];
        int m = s.size();
        for(int i = 0; i < m; ++i)
        {
            res.push_back(s[i]);
            dfs(digits, res, ans);
            res.pop_back();
        }
    }
    
};
相关推荐
EdmundXjs10 小时前
大模型核心概念解读
人工智能·算法
lookaroundd10 小时前
llm-compressor 普通量化调用链分析
python·算法
小羊在睡觉11 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go
兰令水11 小时前
topcode【随机算法题】【2026.5.20打卡-java版本】
java·开发语言·算法
不吃土豆的马铃薯11 小时前
Spdlog 入门:日志记录器与日志槽基础详解
服务器·开发语言·c++·c·日志·spdlog
此生决int11 小时前
算法从入门到精通——前缀和
c++·算法·蓝桥杯
我星期八休息11 小时前
Linux系统编程—库制作与原理
linux·运维·服务器·数据结构·人工智能·python·散列表
大大杰哥11 小时前
leetcode hot100(4)矩阵
算法·leetcode·矩阵
Fuyo_111911 小时前
C++中的活字印刷术——模板·初阶
开发语言·c++·笔记
小白|11 小时前
cmake:昇腾CANN构建系统完全指南
java·c++·算法