0
点赞
收藏
分享

微信扫一扫

17.电话号码的字母组合

萧萧雨潇潇 2022-02-05 阅读 62

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

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

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

解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:

1、路径:也就是已经做出的选择。

2、选择列表:也就是你当前可以做的选择。 

3、结束条件:也就是到达决策树底层,无法再做选择的条件。

回溯算法代码框架: 

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

完整题解: 

class Solution {
public:
    const string letterMap[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv",     "wxyz"};

    vector<string> res;
    string s;
    void backtracking(const string& digits, int index)
    {
        if (index == digits.size())
        {
            res.push_back(s);
            return;
        }
        int digit = digits[index] - '0';
        string letters = letterMap[digit];
        for (int i = 0; i < letters.size(); i++)
        {
            s.push_back(letters[i]);
            backtracking(digits, index + 1);
            s.pop_back();
        }
    }

    vector<string> letterCombinations(string digits) {
        res.clear();
        s.clear();
        if(digits.size() == 0) return res;
        backtracking(digits, 0);
        return res;
    }
};
举报

相关推荐

0 条评论