17.电话号码的字母组合

题目:17. 电话号码的字母组合

class Solution {
public:
    string path;
    vector<string> finalPath;
    vector<string> dictionary = {"abc", "def",  "ghi", "jkl",
                                 "mno", "pqrs", "tuv", "wxyz"};

    vector<string> letterCombinations(string digits) {
        // digits仅包含2-9的字符串
        if(digits.size()==0)return finalPath;
        backtracking(digits, 0,  path, finalPath);
        return finalPath;
    }

    void backtracking(string digits, int index, string & path,vector<string>& finalPath) {
        if (path.size() == digits.size()) {
            finalPath.push_back(path);
            return;
        }
        //函数的含义是从当前所在节点的待选择列表中选一个元素
        //而待选择列表由path构成的递归树决定。
        //在本题中,如若path="a"说明层深为1,则当前选择列表是d、e、f
        //而若进行的是nums【】中选择k个数,则backtracking(index+1,path,finalPath,k);的待选择列表是nums【index+1~end】
        string options=dictionary[digits[index]-'2'];
        for(auto c:options){
            path.push_back(c);
            backtracking(digits,index+1,path,finalPath);
            path.pop_back();
        }
    }
};
posted @ 2025-03-21 16:18  Cheauncey  阅读(20)  评论(0)    收藏  举报