题目
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = "" 输出:[]
示例 3:
输入:digits = "2" 输出:["a","b","c"]
提示:
0 <= digits.length <= 4
-
digits[i]
是范围['2', '9']
的一个数字。
思路:
以digits ="23"为例
递归实现
一个string对象存储前几层递归下来的字符串
如现在是第1层,前几层递归下来的字符串是"a"
一直递归,递归到某一层就带上这一层未被带走过的字符,加入到string对象中文章来源:https://www.toymoban.com/news/detail-682077.html
如果递归到层号==digits.size()的,就返回,因为这一层已经没有字符可以加入了文章来源地址https://www.toymoban.com/news/detail-682077.html
代码实现:
class Solution
{
vector<string> vv {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:
void letter(const string& digits, vector<string> & v,int i,string combin)
{
if(i==digits.size())
{
v.push_back(combin);//一个组合已经有了
return ;
}
string s = vv[digits[i]-'0'];//第i层所有的字符,即第i层的字符串
for(auto e:s)//循环出第i层的所有字符
{
letter(digits,v,i+1,combin+e);//将第i层的某个字符加入到正在组合中的string对象中,并递归进入下一层
}
}
vector<string> letterCombinations(string digits)
{
vector<string> v;
if(digits.empty())
{
return v;
}
int i = 0;//表示第i层
string combin;//存储第i层之前递归下来的字符串
letter( digits,v,i,combin);
return v;
}
};
到了这里,关于leetcode:电话号码的字母组合(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!