题目链接:
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
难度:中等
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
El problema no es difícil, se puede resolver una idea más simple, basta con utilizar el método recursivo para enumerar todas las situaciones.
class Solution {
public:
// 数字-字符串
unordered_map<char, string> phoneMap{
{
'2', "abc"},
{
'3', "def"},
{
'4', "ghi"},
{
'5', "jkl"},
{
'6', "mno"},
{
'7', "pqrs"},
{
'8', "tuv"},
{
'9', "wxyz"}
};
// 返回答案
vector<string> ans;
vector<string> letterCombinations(string digits) {
// 若输入为空 返回空
if(digits.size()==0){
return ans;
}
// 当前的字符串
string combination="";
back(combination,0,digits);
return ans;
}
// i 的意思是 当前已枚举到 digits[i]
void back(string combination,int i,string &digits){
// 结束 入队列
if(combination.size()==digits.size()){
ans.push_back(combination);
}else{
// c 当前的数字
char c=digits[i];
// 取出 c 对应的字符串
string s=phoneMap[c];
// 对取出的 字符串 进行枚举
for (int j = 0; j < s.size(); ++j) {
back(combination + s[j], i + 1, digits);
}
}
}
};
Es un poco simple. . . .