给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
解析:用DFS即可轻松解决。
class Solution {
map<char,string> mp = {{'2',"abc"},{'3',"def"},
{'4',"ghi"},{'5',"jkl"},{'6',"mno"},
{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};
vector<string> res;
public:
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return res;
dfs("",digits);
return res;
}
void dfs(string cur,string next_digits){
if(next_digits.size() == 0)
res.push_back(cur);
string letters = mp[next_digits[0]];
for(int i=0;i<letters.size();++i){
char ch = letters[i];
dfs(cur+ch,next_digits.substr(1));//注意从next_digits的第二个字符取
}
}
};