题目描述:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

LeetCode_17. 电话号码的字母组合_算法思想

示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

算法思想:此题目可以采用DFS和BFS两种方式进行求解。
DFS主要是采用回溯方法,先遍历完digits的所有数字,然后将得到的路径添加到res中,再回溯到前一个数字。
BFS采用一个队列,一层一层存放所有的结果

//DFS
class Solution {
public:
void DFS(string digits,int pos,string &path,vector<string>& res,vector<string>& dic){
if(pos==digits.size()){
res.push_back(path);
return;
}
for(auto c:dic[digits[pos]-'0']){
path.push_back(c);
DFS(digits,pos+1,path,res,dic);
path.pop_back();
}
}

vector<string> letterCombinations(string digits) {
vector<string> res;
string path="";
if(digits.empty())
return res;
vector<string> dic={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
DFS(digits,0,path,res,dic);
return res;
}
};

LeetCode_17. 电话号码的字母组合_git_02