leetcode 17电话号码的字母组合

简介: leetcode 17电话号码的字母组合

电话号码的字母组合


0be102a46f9e43e79f52375bcc356c2e.png

class Solution {
public:
    const string letterMap[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };
    vector<string> result;
    //输入参:转换后的vector , 从第几个按键开始循环 , 已经走的路径
    void backtarcking(vector<int> &digits_i , int startidx , string path)
    {   
      //当路径的长度等于数组的长度,存入结果
        if(path.size() == digits_i.size() )
        {
            result.push_back(path);
            return;
        }
        else
        { 
          //第一次循环,循环数字
            for(int i = startidx ; i < digits_i.size() ; i++)
            {
              //找到输入数字对应的字母表
                string tmp = letterMap[digits_i[i]];
                vector<char> tmp_v(tmp.begin() , tmp.end()) ;
                //第二次循环,循环每一个数字的字母
                for(int j=0 ; j < tmp_v.size() ; j++)
                {
                  //递归回溯,开始循环的数字往后走一个,路径加上已经走的路径
                    backtarcking(digits_i, i+1 , path + tmp_v[j]);
                }
            }
            return;
        }
         return;
    }
    vector<string> letterCombinations(string digits) {
    //输入为空时直接返回
        if(digits.size()==0) return result;
    //字符串转换成vector
        vector<int> digits_i;
        for(auto i:digits) digits_i.push_back( i - '0' );
        string path;
        backtarcking(digits_i , 0 , path);
        return result;
    }
};

二刷

class Solution {
public:
    vector<string> result;
    string worldPath;
    map<char,vector<string>> myMap;
    void map_init()
    {
        myMap.insert(pair<char,vector<string>>('2',{"a","b","c"})) ;
        myMap.insert(pair<char,vector<string>>('3',{"d","e","f"})) ;
        myMap.insert(pair<char,vector<string>>('4',{"g","h","i"})) ;
        myMap.insert(pair<char,vector<string>>('5',{"j","k","l"})) ;
        myMap.insert(pair<char,vector<string>>('6',{"m","n","o"})) ;
        myMap.insert(pair<char,vector<string>>('7',{"p","q","r","s"})) ;
        myMap.insert(pair<char,vector<string>>('8',{"t","u","v"})) ;
        myMap.insert(pair<char,vector<string>>('9',{"w","x","y","z"})) ;
        // for(auto it:myMap)
        //      cout<<it.first<<':'<<(it.second)[0]<<endl;
        // cout<<myMap['2'].size();
    }
    void dfs(string digits , int fir )
    {
        if( worldPath.size() == digits.size())
        {
            result.push_back(worldPath);
            return;
        }
        char num = digits[fir];
        for(int j=0 ; j< myMap[num].size() ;j++)
        {
            worldPath += myMap[num][j];
            dfs(digits,fir+1);
            worldPath.pop_back();
        }
        return;
    }
    vector<string> letterCombinations(string digits) {
        if(digits.size()==0) return result;
        map_init();
        dfs(digits,0);
        return result;
    }
};
相关文章
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
5月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
3月前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
25 1
|
3月前
|
算法
Leetcode第十七题(电话号码的字母组合)
这篇文章介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode第17题——电话号码的字母组合问题,通过递归方法生成所有可能的字母组合。
27 0
Leetcode第十七题(电话号码的字母组合)
|
3月前
|
索引
【LeetCode 11】242.有效的字母异位词
【LeetCode 11】242.有效的字母异位词
20 0
【LeetCode 11】242.有效的字母异位词
|
3月前
|
算法
【LeetCode 52】17.电话号码的字母组合
【LeetCode 52】17.电话号码的字母组合
43 0
|
5月前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
7月前
|
存储
力扣经典150题第四十二题:字母异位词分组
力扣经典150题第四十二题:字母异位词分组
43 0
|
7月前
|
存储
力扣经典150题第四十一题:有效的字母异位词
力扣经典150题第四十一题:有效的字母异位词
40 0
|
5月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
133 2