题目链接:17. 电话号码的字母组合 - 力扣(LeetCode)
普通版本(回溯)
class Solution {
public:string tmp;//临时存放尾插内容vector<string> res;//将尾插好的字符串成组尾插给resvector<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~