leetcode 22. 括号生成

思路:回溯 递归

 

 

代码

class Solution {
public:
    void back_track_Dfs(vector<string>&res,string path,int n,int lc,int rc)
    {
        if(rc>lc||rc>n||lc>n)//不满足条件
        {
            return;
        }
        if(rc==lc&&lc==n)//满足条件  左括号的数量等于右括号的数量并且等于给定的数字的大小 则添加当前路径到结果中
        {
            res.push_back(path);
        }
        //递归填充左括号
        back_track_Dfs(res,path+'(',n,lc+1,rc);
        //递归填充右括号
        back_track_Dfs(res,path+')',n,lc,rc+1);     
    }
    vector<string> generateParenthesis(int n) {
        int lc = 0;//左括号的个数
        int rc  = 0;//右括号的个数
        vector<string>res;//定义一个容器保存结果
        back_track_Dfs(res,"",n,0,0);//递归回溯从0开始
        return res;
    }
};

 

posted @ 2021-09-26 15:59  A-inspire  Views(23)  Comments(0Edit  收藏  举报