刷题记录0804

不知不觉八月了!基本上每天都会写一两道,但没有坚持题解打卡,我发现写题解可以整理自己的思路

22. 括号生成 - 力扣(LeetCode)

是一道回溯的题目 第一次做的时候也看了题解

cpp 复制代码
class Solution {
public:
    // 主函数是生成所有有效的括号组合
    vector<string> generateParenthesis(int n) {
        vector<string> res;  // 存储所有有效的括号组合
        dfs(res, "", n, 0, 0);  // 调用深度优先搜索(DFS)生成括号组合
        return res;  // 返回结果
    }
    // 辅助函数 深度优先搜索生成括号组合
    void dfs(vector<string>& res, string path, int n, int lc, int rc) {
        // 终止条件:当前路径长度达到2n(即括号已经全部用完)
        if(path.size()==2*n)
        {
            res.push_back(path);//把当前存储的存入结果里面
            return ;
        }
        //递归条件1
        if(lc<n) dfs(res,path+'(',n,lc+1,rc);//左括号的长度+1
        if(rc<lc)dfs(res,path+')',n,lc,rc+1);//右括号的长度+1
    }
};