leetcode17.电话号码的字母组合

  1. 题目:
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
    给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
    在这里插入图片描述
  2. 示例:
    输入:“23”
    输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
  3. 思路:
    字符串的合法性
    空字符串
    多个解的顺序
    典型树形问题:递归——回溯法。

在这里插入图片描述
在这里插入图片描述
4. 代码:

public:
    vector<string> letterCombinations(string digits) {
       res.clear();
        if(digits=="") return res;
        findCombination(digits,0,"");
        return res;
    }
private:
    vector<string> res;
    const string letterMap[10]={
        " ",//0
        "", //1
        "abc", //2
        "def",//3
        "ghi",//4
        "jkl",//5
        "mno",//6
        "pqrs",//7
        "tuv",//8
        "wxyz" //9
    };
    void findCombination(const string& digits,int index,const string &s){
        if(index==digits.size()){
            //保存s
            res.push_back(s);
            return;
        }
        char c=digits[index];
        assert(c>='0'&&c<='9'&&c!='1');
        string letters=letterMap[c-'0'];
        for(int i=0;i<letters.size();i++)
            findCombination(digits,index+1,s+letters[i]);
        return;
    }
};

时间复杂度:3^n=O(2 ^n),回溯法效率比较低。
回溯法是暴力解法的一个主要手段。
一般用循环法和回溯法解题。

猜你喜欢

转载自blog.csdn.net/qq_14962179/article/details/86378988