1.题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
2.思路解析
- 深度优先遍历
- 将数字和字母保存在map当中
- 设定一个全局result和临时temp
- 每当index和digits.size()相等时,那么就将temp写到result中
- for循环每个数字对应字母是遍历三次还是四次
3.代码展示
class Solution {
public:
map<char, string> Map{
{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}
};
// 保存返回结果
vector<string> result;
// 临时的
string temp;
// index对应每个数字按键的字符的个数
void DFS(int index, string& digits)
{
// index记录此时tmp中字符的个数,如果和digits的相等,就将temp写到result中
if(digits.size() == index)
{
result.push_back(temp);
return;
}
// digits[index]表示字符,Map[digits[index]][i]表示数字字符对应的英文字母
for(int i = 0; i < Map[digits[index]].size(); ++i)
{
temp.push_back(Map[digits[index]][i]);
DFS(index + 1, digits);
temp.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return result;
DFS(0, digits);
return result;
}
};