题目
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路
首先,创建一个map对象,对应数字和字符串的映射。然后,读取给定的字符串长度,即为组合字符串的长度。依次遍历给定字符串的每一个数字进行组合。
class Solution {
public:
unordered_map<char, string> str_map;
vector<string> res;
void SetDigit2StringMap()
{
str_map['2'] = string("abc");str_map['3'] = string("def");str_map['4'] = string("ghi");str_map['5'] = string("jkl");str_map['6'] = string("mno");str_map['7'] = string("pqrs");str_map['8'] = string("tuv");str_map['9'] = string("wxyz");
}
void letterCombinationsAux(string digits, char* str, int k) {
string digit2str = str_map[digits[k-1]];
for(int i=0; i<digit2str.size(); ++i)
{
str[k-1]=digit2str[i];
if(k-1 == 0)
{
res.emplace_back(string(str));
continue;
}
letterCombinationsAux(digits, str, k-1);
}
}
vector<string> letterCombinations(string digits) {
int k = digits.size();
if(k == 0) return res;
SetDigit2StringMap();
char* str = new char[k+1];str[k]='\0';
letterCombinationsAux(digits, str, k);
delete[] str;
return res;
}
};