n对圆括号,生成所有可能的并且有效的括号组合。
有效的括号组合,就要求了
1、n个‘(’和n个‘)’
2、在括号组合的前i个符号里,‘(’的个数>= ')‘的个数
思路:
如果当前组合里,'(‘的个数=n,并且’)‘的个数=n,就存储该组合。
如果当前组合里,‘(‘的个数<n,就可以添加一个‘(’
如果当前组合里,’)‘的个数<’(‘的个数,就可以添加一个’)'
三个条件是并列的,不是if-else if,而是if-if
代码如下:
class Solution {
public:
void search(int n,int l,int r,string a,vector<string> &arr)
{
if(l==n&&r==n)//l为'('的个数,r为')'的个数,a为当前组合
{
arr.push_back(a);
return;
}
if(l<n)//'('的个数<n的时候
{
search(n,l+1,r,a+"(",arr);//当前组合+'('
}
if(l>r)//')'的个数<'('的个数的时候
{
search(n,l,r+1,a+")",arr);//当前组合+')'
}
}
vector<string> generateParenthesis(int n) {
vector<string> arr;
search(n,0,0,"",arr);
return arr;
}
};