个人思路总结:
题意理解:即如果输入两个数字,则全是两个字母组合;如果输入三个数字,则输出全是三个字母组合。
采用深度优先搜索(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();
}
}
};