题目:
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
class Solution {
public:
vector<string> letterCombinations(string digits) {
ans.clear();
createDic();
dfs(0, digits.size(), digits);
return ans;
}
private:
//建立映射关系
unordered_map<char, vector<char>> dic;
vector<string> ans;
char a[1000];
void createDic() {
dic['2'].push_back('a');
dic['2'].push_back('b');
dic['2'].push_back('c');
dic['3'].push_back('d');
dic['3'].push_back('e');
dic['3'].push_back('f');
dic['4'].push_back('g');
dic['4'].push_back('h');
dic['4'].push_back('i');
dic['5'].push_back('j');
dic['5'].push_back('k');
dic['5'].push_back('l');
dic['6'].push_back('m');
dic['6'].push_back('n');
dic['6'].push_back('o');
dic['7'].push_back('p');
dic['7'].push_back('q');
dic['7'].push_back('r');
dic['7'].push_back('s');
dic['8'].push_back('t');
dic['8'].push_back('u');
dic['8'].push_back('v');
dic['9'].push_back('w');
dic['9'].push_back('x');
dic['9'].push_back('y');
dic['9'].push_back('z');
}
void dfs(int dep, int maxDep, string &digits) {
if (dep == maxDep) {
string s;
for (int i = 0; i < maxDep; i++)
s.push_back(a[i]);
ans.push_back(s);
}
for (int i = 0; i < dic[digits[dep]].size(); i++) {
a[dep] = dic[digits[dep]][i];
dfs(dep + 1, maxDep, digits);
}
}
};