LeetCode 17. 电话号码的字母组合
递归 \(O(3^n) - O(4^n)\)
假如只有两个数字,我们想到的就是双重循环。但是这题输入长度是不确定的,所以我们使用递归的做法。
时间复杂度
由于一个数字对应的字母可能是4个也可能是3个,根据乘法原理,时间复杂度在\(O(3^n) - O(4^n)\)之间
空间复杂度
递归的空间复杂度不知道怎么求
C++ 代码
class Solution {
public:
vector<string> ans;
string str[10] =
{
"", "", "abc","def",
"ghi", "jkl", "mno",
"pqrs", "tuv", "wxyz",
};
vector<string> letterCombinations(string digits) {
if (digits.empty()) return ans;
dfs(digits, 0, "");
return ans;
}
void dfs(string digits, int u, string path)
{
if (u == digits.size()) ans.push_back(path);
else
{
for (auto c : str[digits[u] - '0'])
dfs(digits, u + 1, path + c);
}
}
};

浙公网安备 33010602011771号