class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n<=0) return res;
generate(res,n);
return res;
}
void generate(vector<string> & res,int n){
if(n==0) {res.push_back("");return;}//如果n为0,则空串
vector<string> sub;
for(int i=0;i<n;i++){//左边i个括号,右边n-i个括号,
vector<string> left,right;
generate(left,i);
generate(right,n-i-1);
for(string l:left)
for(string r:right){
res.push_back("("+l+")"+r);
}
}
return;
}
};
上面是优化后的解。
这题目,拿到,想的就是把n拆成两个数之和,求得各自结果,再连接到一起,然后for循环中是从1开始到小于n,左边i个括号,右边n-i-1个括号,剩下一个括号看着放哪,然后找到6个位置,而且还需要判断不重复ÿ