1,题目描述
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2,解题思路
采用深度优先搜索的方法,下面描述其操作流程
1,假设输入的字符串为:234,每个数字都包含3个字母,理论上有3^3种排列组合。
2,可以先选定2中的a、和3中的d,遍历4中的ghi。然后再选定2中的a、和3中的e,遍历4中的ghi。依次类推。但在程序中怎么办呢?可以选择递归的方式。234的所有组合数为2的字符数乘以34的所有字符组合数,34的所有组合数为3的字符数乘以4的所有字符组合数。如下图所示。
3,程序
class Solution {
public:
void DFS(vector<string>& return_value,string& inputDigit,array<string,8>&phoneList,string path,int num =0)
{
if(num==inputDigit.length())
return_value.push_back(path);
else
{
for(char ch:phoneList[inputDigit[num]-'2'])
DFS(return_value,inputDigit,phoneList,path+ch,num+1);
}
}
vector<string> letterCombinations(string digits) {
array<string,8> phone_list={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> rev;
if(digits.empty())
return rev;
string path;
DFS(rev,digits,phone_list,path,0);
return rev;
}
};