一.题目要求
给定一个仅包含数字 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’] 的一个数字。
四.解题思路
start变量用来控制每一层递归该处理原字符串哪个位置的数,第二个for为了穷举每一层可以取到的所有字母
五.代码实现
class Solution {
public:unordered_map<char, string> hashmap = {{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"},{'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};vector<string> letterCombinations(string digits) {vector<string> ans;string path;dfs(ans, path, digits, 0);return ans;}void dfs(vector<string>& ans, string& path, string digits, int start) {if (digits.empty())return;if (path.size() == digits.size()) {ans.push_back(path);return;}for (int i = start; i < digits.size(); i++) {for (int j = 0; j < hashmap[digits[i]].size(); j++) {path += hashmap[digits[i]][j];dfs(ans, path, digits, i + 1);path.pop_back();}}}
};
六.题目总结
–