本题题目要求如下:
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.
1, 构建一个hash map
比如:
map['2'] = "abc"
map['3'] = "def"
2, 进行dfs
拿给定的input举例子 string = "23"
level 0 ""
level 1(2) a b c
level 2(3) def def def
这样就能求出所有解:
代码如下:
class Solution {
public:
vector<string> letterCombinations(string digits) {
init();
len = digits.length();
if (len == 0)
return res;
string str("");
dfs(str, digits, 0);
return res;
}
private:
unordered_map<char, string> str_map;
vector<string> res;
int len;
void init() {
str_map['2'] = "abc";
str_map['3'] = "def";
str_map['4'] = "ghi";
str_map['5'] = "jkl";
str_map['6'] = "mno";
str_map['7'] = "pqrs";
str_map['8'] = "tuv";
str_map['9'] = "wxyz";
}
void dfs(string& tmp, string& digits, int i) {
if (i == len) {
res.push_back(tmp);
return;
}
for (int j = 0; j < str_map[digits[i]].length(); ++j) {
tmp +=str_map[digits[i]][j];
dfs(tmp, digits, i + 1);
tmp.pop_back();
}
}
};