输出n对括号的所有有效组合。
思路:
运用递归的思想。只要左括号没有用完,总可以插入左括号;当已插入的左括号数目大于右括号,那么就可以插入右括号。我们只要记录左右括号剩余的数目,然后递归即可。递归终止条件有两个:当左括号剩余数小于0或者左括号剩余数大于右括号剩余数,此时为无效状态;当左右括号剩余数都为0,此时输出结果。
#include <iostream>
#include <vector>
using namespace std;
void Pare(vector<char>& s, int l, int r, int c)
{
if (l < 0 || r < l)
return;
if (l == 0 && r == 0)
{
for (int i = 0; i < s.size(); ++i)
cout << s[i];
cout << endl;
}
else
{
if (l > 0)
{
s[c] = '(';
Pare(s, l - 1, r, c + 1);
}
if (r > l)
{
s[c] = ')';
Pare(s, l, r - 1, c + 1);
}
}
}
void main()
{
int c = 4;
vector<char> vec(2*c);
Pare(vec, c, c, 0);
}