Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example:
Input: “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
翻译
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
分析
由于不知道有几个字符,所以用递归来做是最好理解的了,相当于套了n重的for循环。
c++实现
class Solution {
public:
vector<string> res;
vector<string> letterCombinations(string digits) {
if (digits == "")
return res;
zuhe(digits,0,"");
return res;
}
void zuhe(string digits,int i,string s) {
if (i == digits.length())
{
res.push_back(s);
return;
}
if (digits[i] == '2')
{
zuhe(digits,i+1,s+"a");
zuhe(digits,i+1,s+"b");
zuhe(digits,i+1,s+"c");
return;
}
if (digits[i] == '3')
{
zuhe(digits,i+1,s+"d");
zuhe(digits,i+1,s+"e");
zuhe(digits,i+1,s+"f");
return;
}
if (digits[i] == '4')
{
zuhe(digits,i+1,s+"g");
zuhe(digits,i+1,s+"h");
zuhe(digits,i+1,s+"i");
return;
}
if (digits[i] == '5')
{
zuhe(digits,i+1,s+"j");
zuhe(digits,i+1,s+"k");
zuhe(digits,i+1,s+"l");
return;
}
if (digits[i] == '6')
{
zuhe(digits,i+1,s+"m");
zuhe(digits,i+1,s+"n");
zuhe(digits,i+1,s+"o");
}
if (digits[i] == '7')
{
zuhe(digits,i+1,s+"p");
zuhe(digits,i+1,s+"q");
zuhe(digits,i+1,s+"r");
zuhe(digits,i+1,s+"s");
return;
}
if (digits[i] == '8')
{
zuhe(digits,i+1,s+"t");
zuhe(digits,i+1,s+"u");
zuhe(digits,i+1,s+"v");
return;
}
if (digits[i] == '9')
{
zuhe(digits,i+1,s+"w");
zuhe(digits,i+1,s+"x");
zuhe(digits,i+1,s+"y");
zuhe(digits,i+1,s+"z");
return;
}
}
};