Leecode17. 电话号码的字母组合——Leecode大厂热题100道系列
Posted 来老铁干了这碗代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode17. 电话号码的字母组合——Leecode大厂热题100道系列相关的知识,希望对你有一定的参考价值。
我是小张同学,立志用最简洁的代码做最高效的表达
以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!
传送门——>Leecode大厂热题100道系列题解
问题描述
给定一个仅包含数字 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’] 的一个数字。
核心思路:dfs模拟全排列。
有一个小技巧:将变量都设置为全局变量,可以避免递归时传递参数造成的高耗时。
class Solution {
public:
vector<string> res; // 存放结果的数组
string temp;
unordered_map<char, string> phoneMap{ // 映射数组
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
vector<string> letterCombinations(string digits) {
if (digits.empty()) {
return res;
}
dfs(digits, 0);
return res;
}
// 回溯
void dfs(string digits, int step) {
if (step == digits.size()) {
res.push_back(temp);
return;
}
char digit = digits[step];
string letters = phoneMap[digit];
for(auto letter : letters) {
temp.push_back(letter);
dfs(digits, step + 1);
temp.pop_back();
}
}
};
以上是关于Leecode17. 电话号码的字母组合——Leecode大厂热题100道系列的主要内容,如果未能解决你的问题,请参考以下文章