LeetCode 17. 电话号码的字母组合

Leetcode Acwing

递归 \(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);
        }
    }
};
posted @ 2021-01-04 20:29  alexemey  阅读(58)  评论(0)    收藏  举报