地址 https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
算法1
DFS做法 从每个数字对应的元素中选出一个 然后进入下一层
最终每层中都选出一个对应的元素 则组合成一个答案
以数字23为例
class Solution { public: map<char, string> m = { {'2',"abc"},{'3',"def"}, {'4',"ghi"},{'5',"jkl"}, {'6',"mno"},{'7',"pqrs"}, {'8',"tuv"},{'9',"wxyz"} }; vector<string> ans; void dfs(string s, string digits, int idx) { if (idx == digits.size()) { ans.push_back(s); return; } char digt = digits[idx]; for (int j = 0; j < m[digt].size(); j++) { s += m[digt][j]; dfs(s, digits,idx + 1); s.pop_back(); } } vector<string> letterCombinations(string digits) { if(digits.size() == 0) return vector<string> (); string s; dfs(s, digits, 0); return ans; } };