![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4567eed423d4d4c3090f3d377ebd16b7.png)
原理:
- digits长度不一定,如果考虑多层循环,根本无法写出循环代码
- 使用回溯算法,外层循环遍历当前数字的字母,然后递归遍历下个数字字母
C++实现:
unordered_map<char,string> map={{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};
string s;
vector<string> ans;
void backtracking( string digits,int index)
{
if(index==digits.size())
{
ans.push_back(s);
return;
}
string a=map[digits[index]];
for(int i=0;i<a.size();i++)
{
s.push_back(a[i]);
backtracking(digits,index+1);
s.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.size()==0)
{
return {};
}
s.clear();
ans.clear();
backtracking(digits,0);
return ans;
}