0
点赞
收藏
分享

微信扫一扫

自我修炼_中级算法篇_leetcode_第14题

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

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



 

示例 1:

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

输入:digits = ""
输出:[]
示例 3:

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

提示:

0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv8ka1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> anss;
        if(digits.empty())return anss;
        unordered_map<char,string> mymap{
            {'2',"abc"},
            {'3',"def"},
            {'4',"ghi"},
            {'5',"jkl"},
            {'6',"mno"},
            {'7',"pqrs"},
            {'8',"tuv"},
            {'9',"wxyz"}
        };
    string ans;
    huisu(digits,anss,mymap,0,ans);
    return  anss;

    }
    void huisu(const string& digits,vector<string>& anss,unordered_map<char,string>& mymap,int index,string& ans){
        if(index  == digits.length()){
            anss.push_back(ans);
        }else
        {
            char digit  = digits[index];
            const string& details  = mymap.at(digit);
            for(const char& detail:details){
                ans.push_back(detail);
                huisu(digits,anss,mymap,index+1,ans);
                ans.pop_back();
            }
        }
    }
};

这里的知识点就是push_back 也可以用在string里。

这道题主要的难题就是for循环的设置,如果我们选择两个就要循环两次,选3个要循环3次。这个是不可控的,这是就应该用到回溯的方法来解决此问题。在代码里我们只用写一个for循环一直递归就好了。进入循环先将detail保存到string里,在回溯的时候再将他保存到vector容器里

 

举报

相关推荐

0 条评论