电话号码的字母组合(c++ 回溯算法)

  1. 题目:
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
  2. 思路:
    涉及到组合问题的时候一般都是采用回溯算法,这题相当于使用DFS的方法,每走一条路线最终积累的字符串就是得到的一个结果。
  3. 代码:
  //涉及到组合的时候 ,使用  回溯算法
    map<char,string> Map = {
    
     {
    
    '2',"abc"},{
    
    '3',"def"},{
    
    '4',"ghi"},
    {
    
    '5',"jkl"},{
    
    '6',"mno"},{
    
    '7',"pqrs"},{
    
    '8',"tuv"},{
    
    '9',"wxyz"} };
    vector<string> res;
    string currentString;
    vector<string> letterCombinations(string digits) {
    
    
        if(!digits.size()){
    
    
            return res;
        }
        DFS(digits);
        return res;
    }
    void DFS(string digit){
    
    
        if(!digit.size()){
    
    
            res.push_back(currentString);
        }else{
    
    
            //取出子串的第一个数字
            char num = digit[0];
            //找出这个数字对应的字符串
            string letter = Map[num];
            for(int i = 0; i < letter.size();i++){
    
    
            	//每个letter的值是这一层的一个子结点
                currentString.push_back(letter[i]);
                //再下一层
                DFS(digit.substr(1));
                //相当于把letter[i]已经加入完毕了,要删除前一个字符之后再进行后面的字符
                currentString.pop_back();
            }
        }
    }
  1. tips:
    在涉及到组合操作时使用回溯算法。

猜你喜欢

转载自blog.csdn.net/qq_43964318/article/details/120244675