22. Generate Parentheses

问题

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

例子

given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

分析

dfs,递归地生成合法的字符串,生成规则如下:

  • 如果(的数量 < n,加入(
  • 如果(的数量 > )的数量,加入)

要点

dfs

时间复杂度

O(n!),由于不会生成不合法的字符串,所以真实的时间复杂度要更小一点。

空间复杂度

O(n)

代码

class Solution {
public:
    vector generateParenthesis(int n) {
        vector res;
        string str;
        generateParenthesis(res, str, 0, 0, n);
        return res;
    }
    
private:
    void generateParenthesis(vector &res, string str, int open, int close, int n) {
        if (str.size() == n << 1) {
            res.push_back(str);
            return;
        }
        if (open < n)
            generateParenthesis(res, str + "(", open + 1, close, n);
        if (open > close)
            generateParenthesis(res, str + ")", open, close + 1, n);
    }
};

你可能感兴趣的:(22. Generate Parentheses)