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();
        }
    }
    
};
相关推荐
武帝为此4 小时前
【数据清洗缺失值处理】
python·算法·数学建模
Halo_tjn5 小时前
Java 基于字符串相关知识点
java·开发语言·算法
念越5 小时前
算法每日一题 Day08|双指针法解决三数之和
算法·力扣
万法若空5 小时前
C++ <memory> 库全方位详解
开发语言·c++
黎阳之光5 小时前
黎阳之光透明管理:视频孪生重构智慧仓储新范式
人工智能·算法·安全·重构·数字孪生
代码中介商5 小时前
C++ 类型转换深度解析:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
青小莫5 小时前
C++之string(OJ练习)
开发语言·c++·stl
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历
c++·leetcode·深度优先
-Marks-6 小时前
【C++编程】STL简介 --- (是什么 | 版本发展历程 | 六大组件 | 重要性缺陷以及如何学习)
开发语言·c++·学习·stl·stl版本