LeetCode_17. 电话号码的字母组合
原创
©著作权归作者所有:来自51CTO博客作者晴天码字的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“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;
}
};