问题描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例2:
输入:digits = “”
输出:[]
示例3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
- 0 <= digits.length <= 4
- digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
解法
终于自己做出一道题了,太开心了!!!!!!
class Solution {
private:
map<char,vector<char>> a=
{
{'2',{'a','b','c'}},
{'3',{'d','e','f'}},
{'4',{'g','h','i'}},
{'5',{'j','k','l'}},
{'6',{'m','n','o'}},
{'7',{'p','q','r','s'}},
{'8',{'t','u','v'}},
{'9',{'w','x','y','z'}}
};
public:
vector<string> letterCombinations(char s,vector<string> result)
{
vector<string> r;
if(result.size()==0)
{
for(int i = 0;i<a[s].size();i++)
{
string t;
t.push_back(a[s][i]);
r.push_back(t);
}
}
else
{
for(int i = 0;i<a[s].size();i++)
{
for(int j=0;j<result.size();j++)
{
r.push_back(result[j]+a[s][i]);
}
}
}
return r;
}
vector<string> letterCombinations(string digits) {
vector<string> result;
if(digits=="")
{
return {};
}
else
{
for(int i=0;i<digits.size();i++)
{
result = letterCombinations(digits[i],result);
}
return result;
}
}
};