个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客
个人专栏
力扣递归算法题
http://t.csdnimg.cn/yUl2I
【C++】
http://t.csdnimg.cn/6AbpV
数据结构与算法
http://t.csdnimg.cn/hKh2l
前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的
我讲述题目会把讲解部分分为3个部分:
1、题目解析
2、算法原理思路讲解
3、代码实现
题目链接:电话号码的字母组合
题目
给定一个仅包含数字 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']
的一个数字。题目的意思非常简单,给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出了数字到字母的映射。
示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
一、画出决策树
以"23"为例子
决策树就是我们后面设计函数的思路
二、设计代码
(1)全局变量
unordered_map phoneMap
{
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
vector ret;
string path;
(2)设计递归函数
void dfs(string digits,int pos)
以上思路讲解完毕,大家可以自己做一下了
class Solution
{
public:
unordered_map phoneMap
{
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
vector ret;
string path;
void dfs(string digits,int pos)
{
if (pos == digits.size())
{
ret.push_back(path);
return ;
}
char digit = digits[pos];
const string& letters = phoneMap[digit];
for (int i = 0; i < letters.size(); i++)
{
path += letters[i];
dfs(digits,pos+1);
path.pop_back();
}
}
vector letterCombinations(string digits)
{
if (digits.empty())
{
return ret;;
}
dfs(digits,0);
return ret;
}
};