【LeetCode】电话号码的字母组合
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
完整代码
//创建数字映射的字符串数组
string letterMap[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
class Solution {
public:
//核心思想:总计深度为digits.size()层的递归
//每层递归在字符串中的一个字符进行组合
void combineStr(const string& digits, size_t index, const string& str, vector<string>& strs){
if(index == digits.size())
{
strs.push_back(str);
return;
}
//获取数字对应的字符数组
string letters = letterMap[digits[index] - '0'];
for(size_t i = 0; i < letters.size(); i++)
{
combineStr(digits, index + 1, str + letters[i], strs);
}
}
vector<string> letterCombinations(string digits) {
vector<string> strs;
if(digits.empty())
{
return strs;
}
size_t index = 0;
string str;
//递归子问题组合字符串
combineStr(digits, index, str, strs);
return strs;
}
};
还没有评论,来说两句吧...