给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
解题思路:首先建立一个map实现数字与字母的对应关系,然后通过递归的方法,遍历所有可能的组合
vector<string> nummap = {" ", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
void grouphandle(string digits, vector<string> &nummap, int times, string out, vector<string> &output)
{
/*3.当遍历层数到达字符串最末端时,单次完整遍历结束,存储当前序列*/
if(times == digits.length())
{
output.push_back(out);
}
else
{
/*4.每层遍历时,先根据数字找到表中对应字符串*/
string target = nummap[digits[times] - '0'];
for(int i = 0; i < target.size(); i ++)
{
/*5.遍历对应字符串所有元素,进入下一层递归*/
out.push_back(target[i]);
grouphandle(digits, nummap, times + 1, out, output);
/*6.返回上一层递归时,需要弹出本次元素*/
out.pop_back();
}
}
}
vector<string> Solution::letterCombinations(string digits)
{
vector<string> output;
if(digits.empty() == true)
{
return output;
}
/*1.建立一个map对应数字和字母*/
/*2.递归所有可能的组合*/
grouphandle(digits, nummap, 0, "",output);
return output;
}