[Lc]17电话号码的字母组合
Contents
题目
题解
- 时间复杂度$O(3^{N}+4^{M})$,N是有三个字母的数字数量,M是有4个字母的数字数量。
- 空间复杂度$O(3^{N}+4^{M})$,保存结果的数量
class Solution {
vector<string> res;//定义res保存结果
public:
vector<string> letterCombinations(string digits) {
if(digits.empty()) return res;//digits为0,返回空res
vector<string> dict = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//定义数字对应的数组,0,1为空
getLettersDFS(digits,dict,0,"");//调用递归函数
return res;//返回结果
}
void getLettersDFS(const string& digits,const vector<string>& dict, int level, string out){
if(level == digits.size()){
res.push_back(out);
return;
}//若level等于digits的长度,说明level已经遍历完所有的字符,(level从0开始到digits.size()-1),则把暂存的结果out加入res
string str = dict[digits[level] - '0'];//将第level-1个数多代表的几个字母存入str
for(int i=0; i<str.size(); i++){
getLettersDFS(digits, dict, level+1, out+str[i]);//遍历str中的所有字母,加到out后面并递归
}
}
};
Author ChrisHRZ
LastMod 2020-04-20