1. 程式人生 > >Generate Parentheses 括號生成

Generate Parentheses 括號生成

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 =3,生成結果為:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

思路:採用回溯的方法,每次把當前已經加入左括號的個數left和右括號的個數right計入函式引數中,如果left等於n並且right等於n,就把當前的字串curStr加入結果res中。否則如果當前左括號的個數left小於n,就遞迴呼叫自身,並傳入當前字串curStr+'(',如果當前右括號數right小於左括號數left,就遞迴呼叫自身,傳入當前字串為curStr+')'

參考程式碼:

class Solution {
public:
void generateParenthesisCore(int left, int right, vector<string> &res, string &curStr,int length) {
	if (left == length && right == length) {
		res.push_back(curStr);
		return;
	}
	if (left < length) {
		curStr.push_back('(');
		generateParenthesisCore(left + 1, right, res, curStr, length);
		curStr.pop_back();
	}
	if (right < left) {
		curStr.push_back(')');
		generateParenthesisCore(left, right+1, res, curStr, length);
		curStr.pop_back();
	}
}
vector<string> generateParenthesis(int n) {
	vector<string> res;
	string curStr = "";
	generateParenthesisCore(0, 0, res, curStr,n);
	return res;
}
};