给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"
这是一道类似全排列的题目,使用递归思想
void digui_out(int idx, string& digits, map<int, string>& maps, string& outstr, vector<string>& result)
{
if (idx == digits.size())
{
//cout << outstr << endl;
result.push_back(outstr);
return;
}
int number = digits[idx] - '0';
string chs = maps[number];
for (int i = 0; i < chs.size(); i++)
{
outstr += chs[i];
digui_out(idx + 1, digits, maps, outstr, result);
outstr.pop_back();
}
}
vector<string> letterCombinations(string digits) {
map<int, string> maps;
maps[2] = "abc";
maps[3] = "def";
maps[4] = "ghi";
maps[5] = "jkl";
maps[6] = "mno";
maps[7] = "pqrs";
maps[8] = "tuv";
maps[9] = "wxyz";
vector<string> result;
if(digits.size() == 0)
{
return result;
}
string out;
digui_out(0,digits,maps,out,result);
return result;
}