22. Generate Parentheses
Difficulty: Medium
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
Solution
思路
递归的方法,生成的括号是成对的,左右括号各n
个,所以递归终止条件即是left=n && right = n
。
如果left
小于n
,则left
数量+1
,且结果+(
。反之亦然,注意left>right
。如果right
大于left
说明已经不合法匹配。
Language: C++
class Solution {
public:
vector<string> generateParenthesis(int n) {
generateOneByOne(0, 0, n, "");
return v;
}
void generateOneByOne(int left, int right, int n, string ans) {
if (left == n && right == n){
v.push_back(ans);
return;
}
if (left < n)
generateOneByOne(left + 1, right, n, ans + "(");
if (left > right && right < n)
generateOneByOne(left, right + 1, n, ans + ")");
}
private:
vector<string> v;
};