动态规划的方法需要考虑重复的组合,1位1位的考虑比较简单
class Solution {
public:vector<string> ans;
int num;
void solve(int pi,int num,int n,string &s){
if(num>2*n-pi+1)
return;
if(pi>2*n){
if(num==0)
ans.push_back(s);
return;
}
s += '(';
solve(pi+1,num+1,n,s);
s = s.substr(0,s.length()-1);
if(num>0){
s += ')';
solve(pi+1,num-1,n,s);
s = s.substr(0,s.length()-1);
}
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ans.clear();
string s = "";
solve(1,0,n,s);
return ans;
}
};