个人思路总结:
题意理解:即如果输入两个数字,则全是两个字母组合;如果输入三个数字,则输出全是三个字母组合。
采用深度优先搜索(DFS),递归实现。其实DFS也可以用非递归方法实现,即借用栈来实现。
代码如下:
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
map<char,string> table{
{'2',"abc"}, {'3',"def"}, {'4',"ghi"}, {'5',"jkl"},
{'6',"mno"}, {'7',"pqrs"}, {'8',"tuv"}, {'9',"wxyz"}
};
int len = digits.size();
if(len==0) return {};
dfs(result,"",digits,table,0);
return result;
}
void dfs(vector<string>& result,string str,string& digits,map<char,string>& hash,int k)
{
if(str.size()==digits.size())
{
result.push_back(str);
return;
}
string tmp = hash[digits[k]];
for(int i=0;i<tmp.size();i++)
{
str += tmp[i];
dfs(result,str,digits,hash,k+1);
str.pop_back();
}
}
};
本文介绍了一种使用深度优先搜索(DFS)算法解决电话键盘字母组合问题的方法。通过递归实现,根据输入的数字串生成对应的字母组合,适用于输入为两到三位数字的情况。文章详细解释了算法思路,并提供了C++代码实现。
886

被折叠的 条评论
为什么被折叠?



