leetcode 括号生成 中等

 

 

递归生成括号。有两个关键参数 lCnt,rCnt 分别表示已生成的左括号和有括号的数量。spa

因此一共分出四种状况:code

① lCnt == n && rCnt == n,将生成的括号放入 vector<string> ans 中blog

② lCnt == n && rCnt < n,只能生成右括号递归

③ lCnt == rCnt,只能生成左括号string

④ 生成左括号或者有括号均可io

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        string s;
        solve(s, 0, 0, n);
        return ans;
    }

    void solve(string &s, int lCnt, int rCnt, const int &n) {  // lCnt: 左括号的数目, rCnt: 有括号的数目
        if(lCnt == n && rCnt == n) {
            ans.emplace_back(s);
            return ;
        }
        if(lCnt == rCnt) {      // 左右括号数目同样, 只能放左括号
            s.push_back('(');
            solve(s, lCnt + 1, rCnt, n);
            s.pop_back();
        } else if(lCnt == n) {  // 左括号满了, 只能放右括号
            s.push_back(')');
            solve(s, lCnt, rCnt + 1, n);
            s.pop_back();
        } else {    // 均可以放
            s.push_back('(');
            solve(s, lCnt + 1, rCnt, n);
            s.pop_back();
            s.push_back(')');
            solve(s, lCnt, rCnt + 1, n);
            s.pop_back();
        }
    }

    vector<string> ans;
};
相关文章
相关标签/搜索