Question:
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:
遞歸求解,參數cur表示當前的字符串,left表示還可以加左括號的個數,right表示必須加右括號的個數。那麼對於當前的cur,就可以要麼給它加一個左括號,要麼加一個右括號,然後繼續往下遞歸。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
helper("", n, 0, ret);
return ret;
}
void helper(string cur, int left, int right, vector<string> & ret) {
if (!left) {
for (int i = 0; i < right; i++)
cur += ")";
ret.push_back(cur);
return;
}
helper(cur+"(", left-1, right+1, ret);
if (right)
helper(cur+")", left, right-1, ret);
}
};