leetcode 括号生成 中等

leetcode 括号生成 中等

 

 

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

所以一共分出四种情况:

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

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

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

④ 生成左括号或者有括号都可

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;
};

 

leetcode 括号生成 中等

上一篇:十七、centeros7安装docker


下一篇:PHP将图片二进制转换