https://oj.leetcode.com/problems/generate-parentheses/

输入n产生n个( ,n个 )组成的所有合法的括号组合。

现在纸上画画,找到规律:

1.每一个位置上 ( 的个数必须 >= ) 的个数

2.如果 ( 的个数是n了,则只能再画 ) 了

3.否则,既可以是 ( 又可以是 )

4.初始第一个位置是 (

5.当 string的长度是 2*n 的时候停止

使用递归调用:

class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;
if(n<=)
return ans; string ansPiece;
ansPiece.append("("); subGenerateParenthesis(n,ans,ansPiece); return ans;
}
void subGenerateParenthesis(int &n, vector<string> &ans, string ansPiece)
{
if(ansPiece.size() == *n)
{
ans.push_back(ansPiece);
return;
}
int leftNum = ;
int rightNum = ;
for(int i = ;i<ansPiece.size();i++)
{
if(ansPiece[i]=='(')
leftNum++;
else
rightNum++;
}
if(leftNum==n )
{
ansPiece.push_back(')');
subGenerateParenthesis(n,ans,ansPiece);
}
else if(leftNum == rightNum)
{
ansPiece.push_back('(');
subGenerateParenthesis(n,ans,ansPiece);
}
else
{
string ansPiece2 = ansPiece;
ansPiece.push_back('(');
subGenerateParenthesis(n,ans,ansPiece); ansPiece2.push_back(')');
subGenerateParenthesis(n,ans,ansPiece2);
}
}
};
05-28 02:53