题目链接: 17. 电话号码的字母组合 - 力扣(LeetCode)
普通版本(回溯)
cpp
class Solution {
public:
string tmp;//临时存放尾插内容
vector<string> res;//将尾插好的字符串成组尾插给res
vector<string> board={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//为了使得num与字符串在数组中的位置相对应
//数字2对应的字符串应该board数组中的下标为2的字符串,即"abc"
//数字3对应的字符串应该board数组中的下标为3的字符串,即"def"
//数字4对应的字符串应该board数组中的下标为4的字符串,即"ghi"
//...
//pos用于记录是否遍历完整个digits字符串
void DFS(int pos,string digits)//深度优先遍历
{
if(pos==digits.size())//整个字符串遍历完后就退出
{
res.push_back(tmp);
return;
}
int num=digits[pos]-'0';//用字符串转整数的方式获取digit中的各个数字
for(int i=0;i<board[num].size();i++)
{
tmp.push_back(board[num][i]);
DFS(pos+1,digits);
tmp.pop_back();//尾删,只删除一个
}
}
vector<string> letterCombinations(string digits)
{
if(digits.size()==0)
{
return res;
}
DFS(0,digits);
return res;
}
};
优化版本(待补充)
~over~