题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
算法1
DFS做法 从每个数字对应的元素中选出一个 然后进入下一层
最终每层中都选出一个对应的元素 则组合成一个答案
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;
}
};