回溯递归大法好!
首先分析了每个左括号出现的位置,设置初始的序列都是’)’,只要正确找到’(‘的位置,然后回溯即可。
设第i个’(‘位置出现的位置为j。
那么第i+1个’('的位置变化范围为**[j+1,2*i-1**);
初始i和j都是0,我们按i=0为第一个括号位置
class Solution {
public:
vector<string> res;
void generate(int i,string &s,int &n,int j){
if(i==n){
res.push_back(s);
return;}
for(;j<2*i+1;++j){
s[j]='(';
generate(i+1,s,n,j+1);
s[j]=')';
}
}
vector<string> generateParenthesis(int n) {
string s(2*n,')');
generate(0,s,n,0);
return res;
}
};