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:
"((()))", "(()())", "(())()", "()(())", "()()()"
32/32test
8ms
class dataU{
public:
int leftCnt;
int rightCnt;
string result;
dataU():leftCnt(0), rightCnt(0){}
dataU(const dataU &other){
leftCnt = other.leftCnt;
rightCnt = other.rightCnt;
result = other.result;
}
};
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if (n < 1)
return res;
vector<dataU> *pre = new vector<dataU> (1);
vector<dataU> *cur = new vector<dataU> ();
for (int i = 1; i <= 2 * n; ++i) {
cur->clear();
for (int index = 0; index < pre->size(); ++index) {
dataU &preItem = (*pre)[index];
if (preItem.leftCnt < n) {
dataU newItem(preItem);
newItem.leftCnt += 1;
newItem.result += "(";
cur->push_back(newItem);
}
if (preItem.leftCnt > preItem.rightCnt) {
dataU newItem(preItem);
newItem.rightCnt += 1;
newItem.result += ")";
cur->push_back(newItem);
}
}
vector<dataU> *temp = cur;
cur = pre;
pre = temp;
}
for (int i = 0; i < pre->size(); ++i) {
res.push_back( (*pre)[i].result);
}
return res;
}
};
参见
http://blog.unieagle.net/2012/09/21/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Agenerate-parentheses/