LeetCode 22. 括号生成

问题描述:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合

class Solution {
public:
	//括号匹配检查
	bool testFS(string& sign) {
		int temp = 0;
		int i;
		for (i = 0; i < sign.size(); i++) {
			if (sign[i] == '(') {
				++temp;
			}
			else {
				if (temp == 0) break;
				else {
					--temp;
				}
			}	
		}
		if (i == sign.size() && temp == 0) return true;
		else return false;
	}
	void add(string sign, int layer, const int& n, vector<string>& res, int left = 1 , int right = 0) {
		if (layer == 2*n && testFS(sign))
			res.push_back(sign);
		else {
			if (left < n) {
				add(sign + "(", 1 + layer, n, res, 1 + left, right);
			}
			if (right < n) {
				add(sign + ")", 1 + layer, n, res, left, right + 1);
			}
			
		}
	}
	vector<string> generateParenthesis(int n) {
		vector<string> res;
		if (n == 0) return res;
		add(string(1, '('), 1, n, res);
		return res;
	}
};

  

posted @ 2020-04-09 10:24  airfy  阅读(98)  评论(0)    收藏  举报