现在的位置: 首页 > 综合 > 正文

CI8.5–有效括号组合问题

2018年02月23日 ⁄ 综合 ⁄ 共 468字 ⁄ 字号 评论关闭

输出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);
}

抱歉!评论已关闭.