首页 > 其他 > 详细

leetcode 括号生成 中等

时间:2021-08-07 00:03:42      阅读:36      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

递归生成括号。有两个关键参数 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 括号生成 中等

原文:https://www.cnblogs.com/rookie-acmer/p/15110598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!