dfs回溯算法,拨号

发布时间 2023-11-15 10:49:55作者: 卧龙丹心

题目

电话号码的字母组合
给定一个仅包含数字 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'] 的一个数字。
相关标签

C++

解答

class Solution {
public:
// 定义数字到字母的映射关系
unordered_map<char, string> digitMap = {
{'2', "abc"},
{'3', "def"},
{'4', "ghi"},
{'5', "jkl"},
{'6', "mno"},
{'7', "pqrs"},
{'8', "tuv"},
{'9', "wxyz"}
};
vector res;
void dfs(string digits,int index,string current){
if(index == digits.length()&& digits.length()>=1){
res.push_back(current);
}
for(char c:digitMap[digits[index]]){
current += c;
dfs(digits,index+1,current);
current.pop_back();
}

}
vector<string> letterCombinations(string digits) {
    res.clear();
    dfs(digits,0,"");
    return res;
}

};

关键

dfs处理,利用递归函数处理,一层一层解决,把每一个字母拿出来处理,处理完返回,就可以实现全部遍历