Generate Parentheses 题解
题目来源:Generate Parentheses
> Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()"
解题思路:
用递归,一个括号一个括号放,只要有左括号在,随时都可以放;放右括号时,已经放好的左括号数量要多余已放好的右括号才可以。
void gen(vector<string> &result, string pre, int left, int right)
{
if(left < 0 || right < 0) return;
if(left == 0 && right == 0)
{
result.push_back(pre);
return;
}
if(left > 0)
gen(result, pre+"(", left-1, right);
if(left < right) // (()
gen(result, pre+")", left, right-1);
}
vector<string> generateParenthesis(int n)
{
vector<string> result;
string pre;
gen(result, pre, n, n);
return move(result);
}
Last updated
Was this helpful?