链接:http://leetcode.com/onlinejudge#question_22
题目:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
思路:深度优先搜索就可以了。以每一个左括号为分界线,添加不同数量的右括号来回溯。
当然,右括号的总数量是不能超过已有的左括号,剩下的要满足还未匹配的左括号。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> collection;
if (n == 0)
return collection;
vector<string> traces;
DFS(collection, traces, 0, 0, n);
return collection;
}
private:
void DFS(vector<string> &collection, vector<string> &traces, int left, int right, const int n) {
if (left + 1 == n) {
string s = "";
for (int i=0; i<traces.size(); i++)
s += traces[i];
s += "(" + string(n - right, ')');
collection.push_back(s);
return;
}
string piece = "(";
for (int i=0; i < n-right && i <= left+1-right; i++) {
traces.push_back(piece);
DFS(collection, traces, left+1, right+i, n);
traces.pop_back();
piece += ")";
}
}
};