️️️️Take your time ! ️️️️
个人主页:大魔王
所属专栏:魔王的修炼之路–C++
如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的点赞和关注,支持一下博主。同时记得收藏✨这篇文章,方便以后重新阅读。
这个题目需要通过深度优先遍历DFS来解决,就相当于高中数学的排列组合,也类似于二叉树的前序遍历。
给定一个仅包含数字 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’] 的一个数字。
//abc def ghi
void combine(vector<string>& cmb, string& digits, size_t i,string* map, string str)
{
if(i == digits.size())
{
cmb.push_back(str);
return;
}
for(int j = 0; j < (map[digits[i] - '0']).size(); j++)
{
combine(cmb, digits, i + 1, map, str + (map[digits[i] - '0'])[j]);
}
}
class Solution {
public:
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return vector<string>();
string map[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};//存数字对应的字母
vector<string> cmb;//存组合的字母
string str;
size_t i = 0;//存当前走到第 i + 1个数字了
combine(cmb, digits, i, map, str);
return cmb;
}
};
专栏推荐
魔王的修炼之路–C语言
魔王的修炼之路–数据结构初阶
魔王的修炼之路–C++
魔王的修炼之路–Linux
更新不易,希望得到友友的三连支持一波。收藏这篇文章,意味着你将永久拥有它,无论何时何地,都可以立即找到重新阅读;关注博主,意味着无论何时何地,博主将永久和你一起学习进步,为你带来有价值的内容。