给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
使用递归,一个数字一个数字处理,知道处理完所有数字,返回字符串数组
代码
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
if(digits.size()==0)return res;
for(char &c:getabc(digits[0])){
res.push_back(string(1, c));
}
return func(res,digits,1);
}
vector<string> func(vector<string>& strs, string& digits, int index){
vector<string> res;
if(index >= digits.size()) return strs;
for(auto && s:strs){
for(char &c:getabc(digits[index])){
res.push_back(s+c);
}
}
return func(res,digits,index+1);
}
string getabc(char digit){
switch(digit){
case '2':return "abc";
case '3':return "def";
case '4':return "ghi";
case '5':return "jkl";
case '6':return "mno";
case '7':return "pqrs";
case '8':return "tuv";
case '9':return "wxyz";
default:return "";
}
}
};