题目
给定一个仅包含数字 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']
的一个数字。
思路一:哈希表+DFS
class Solution {
public:
string s;
vector<string> ans;
unordered_map<int, string> mp {
{2, "abc" },
{3, "def" },
{4, "ghi" },
{5, "jkl" },
{6, "mno" },
{7, "pqrs" },
{8, "tuv" },
{9, "wxyz" }
};
void DFS(int index, const string &digits){
if(index==digits.size()){
ans.push_back(s);
return ;
}
int num=digits[index]-'0';
string letters=mp[num];
for(int i=0;i<letters.size();i++){
s.push_back(letters[i]);
DFS(index+1,digits);
s.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.size()==0)return ans;
DFS(0,digits);
return ans;
}
};
全排列问题