1.题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
2.解答
通过map存一个键值对。对第一个字母的直接放入vector,后续弹出,与其他元素排列组合。
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits == "") return {};
vector<string> res;
unordered_map<char, string> num_str_map{{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};
for (int i=0; i<digits.length(); i++) {
char s = digits[i];
auto it = num_str_map.find(s);
auto lens = res.size();
for (int j=0; j<lens; j++){
string tmp = res.front();
res.erase(res.begin());
for (auto c: it->second) {
res.emplace_back(tmp+c);
}
}
if (!lens) {
for (auto c: it->second) {
string str(1,c);
res.push_back(str);
}
}
}
return res;
}
};