Leetcode 22. 括号生成

暴力深搜,s是当前的括号串,sta得到下一个括号是否可以是’(‘或’)’,当已经使用了n个’(‘,直接在s后面补上右括号即可

class Solution {
public:
    vector<int> sta;
    vector<string> ans;
    string s;
    void dfs(int n, int M) {
        if (!n) {
            ans.push_back(s);
            for (int i = s.size(); i < M; ++i)
                ans.back().push_back(')');
            return;
        }
        if (sta.empty()) sta.push_back('('), s.push_back('('), dfs(n - 1, M), s.pop_back(), sta.pop_back();
        else {
            sta.push_back('('), s.push_back('('), dfs(n - 1, M), sta.pop_back(), s.pop_back();
            sta.pop_back(), s.push_back(')'), dfs(n, M), sta.push_back('('), s.pop_back();
        }
    }
    vector<string> generateParenthesis(int n) {
        ans.clear();
        dfs(n, n * 2);
        return ans;
    }
};

你可能感兴趣的:(Leetcode 22. 括号生成)