给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
示例 2:
输入:“234”
输出:[“adg”,“adh”,“adi”,“aeg”,“aeh”,“aei”,“afg”,“afh”,“afi”,“bdg”,“bdh”,“bdi”,“beg”,“beh”,“bei”,“bfg”,“bfh”,“bfi”,“cdg”,“cdh”,“cdi”,“ceg”,“ceh”,“cei”,“cfg”,“cfh”,“cfi”].
解题思路:
这道题是经典的回溯问题,运用递归就可以解答了,具体的看代码了。
c++代码如下
class Solution {
public:
vector<string> letterCombinations(string digits) {
unordered_map<char, string> m = {
{'2', "abc"}, {'3',"def"}, {'4',"ghi"}, {'5',"jkl"},
{'6',"mno"}, {'7',"pqrs"},{'8',"tuv"},
{'9',"wxyz"}
};
vector<string> res;
if(digits == "")
return res;
combination(digits, res, m, "", 0);
return res;
}
void combination(string digits, vector<string> &res, unordered_map<char, string> m, string str, int k) {
if(str.size() == digits.size()){
res.push_back(str);
return ;
}
string temp = m[digits[k]];
for(char c : temp) {
str += c;
combination(digits, res, m, str, k + 1);
str.pop_back();
}
return ;
}
};