题目如下:
解题思路:
因为不确定字符串的长度,所以用递归 Recursion 来解。首先建立一个字典 dict_map,保存每个数字所代表的字符串;然后还需要一个变量 level,记录当前遍历字符串中的位置。
- 在递归函数中首先判断 level,如果跟 digits 中数字的个数相等了,将当前的组合加入结果 res 中,然后返回。
- 否则通过 digits 中的数字到 dict_map 中取出字符串,然后遍历这个取出的字符串,将每个字符都加到当前的组合后面,并继续递归调用函数即可。
代码如下:
class Solution {
public:
vector<string> letterCombinations(string digits) {
//排除字符串为空的情况
if(digits.empty())
return {};
//通过哈希表建立映射关系(字典)
std::map<char, string> num_map {
{'2',"abc"}, {'3',"def"}, {'4',"ghi"}, {'5',"jkl"},
{'6',"mno"}, {'7',"pqrs"}, {'8',"tuv"}, {'9',"wxyz"}
};
vector<string> res;
LC_DFS(digits, num_map, 0, "", res);
return res;
}
//level记录当前递归的层数(对应digits中的第几个数)
void LC_DFS(string digits, map<char,string> dict_map, int level, string out, vector<string>& res){
if(level == digits.size()){
res.push_back(out);
return ;
}
string str = dict_map[digits[level]];
//递归调用
for(int i = 0; i < str.size(); i++){
LC_DFS(digits, dict_map, level+1, out+str[i], res);
}
}
};