关键:从起始位置至右的任意序列,左括号的数目>=右括号的数目
void
generateParenthesis(
int
n
)
{
generate(
n
,
n
,
""
);
}
void
generate(
int
leftNum
,
int
rightNum
,
string
s
)
{
//递归出口
if
(
leftNum
== 0 &&
rightNum
== 0)
{
cout <<
s
<< endl;
}
//只要左括号还有,就可以打印
if
(
leftNum
> 0)
{
generate(
leftNum
- 1,
rightNum
,
s
+
'('
);
}
//当剩余的左括号的数目小于剩余的右括号的树木的时候,即字符串中 左括号的数目>=右括号的数目,就可以打印右括号
//当剩余的左括号的数目小于剩余的右括号的树木的时候,即字符串中 左括号的数目>=右括号的数目,就可以打印右括号
if
(
rightNum
> 0 &&
leftNum
<
rightNum
)
{
generate(
leftNum
,
rightNum
- 1,
s
+
')'
);
}
}
![261839053991096.png](https://images0.cnblogs.com/blog/631913/201505/261839053991096.png)
![261839062128211.png](https://images0.cnblogs.com/blog/631913/201505/261839062128211.png)
![261839072271155.png](https://images0.cnblogs.com/blog/631913/201505/261839072271155.png)
![261839096497327.png](https://images0.cnblogs.com/blog/631913/201505/261839096497327.png)