不知不觉八月了!基本上每天都会写一两道,但没有坚持题解打卡,我发现写题解可以整理自己的思路
是一道回溯的题目 第一次做的时候也看了题解
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
}
};