原题题目
代码实现(首刷自解)
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> ret,temp;
if(!digits.size()) return ret;
vector<vector<char>> nums(8);
char tempchr = 'a';
for(int i=0;i<8;++i)
{
for(int j=0;j<3;++j)
nums[i].emplace_back(tempchr++);
if(i==5 || i==7) nums[i].emplace_back(tempchr++);
}
for(const auto& num:digits)
{
temp.clear();
if(ret.empty()) ret.emplace_back("");
for(const auto& str:ret)
{
for(const auto& chr:nums[num-'2'])
temp.emplace_back(str+chr);
}
ret = temp;
}
return ret;
}
};
代码实现(二刷自解双百DFS C++)
class Solution {
public:
void depthfirstsearch(vector<string>& ret,const vector<string>& str,const string& digits,string& temp,int pos)
{
if(pos == digits.size())
{
if(pos) ret.emplace_back(temp);
return;
}
for(const auto& chr:str[digits[pos]-'2'])
{
string tempstr = temp+chr;
depthfirstsearch(ret,str,digits,tempstr,pos+1);
}
return;
}
vector<string> letterCombinations(string digits) {
vector<string> ret;
vector<string> str{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
string temp;
depthfirstsearch(ret,str,digits,temp,0);
return ret;
}
};
代码实现(三刷自解 C++ DAY 154)
class Solution {
public:
void visit(vector<string>& ret,vector<string>& v,string& digits,string tmp,int pos)
{
if(pos == digits.size())
{
if(pos) ret.emplace_back(tmp);
return;
}
for(int i=0;i<v[digits[pos]-'2'].size();++i)
{
string s = tmp+v[digits[pos]-'2'][i];
visit(ret,v,digits,s,pos+1);
}
}
vector<string> letterCombinations(string digits) {
vector<string> v{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"},ret;
string tmp;
visit(ret,v,digits,tmp,0);
return ret;
}
};