题目: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();
}
}
};