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:
"((()))", "(()())", "(())()", "()(())", "()()()"
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
bool* result = new bool[2*n];
dfs(ret, result, 0, 2*n);
delete result;
return ret;
}
void dfs(vector<string>& ret, bool result[], int cur, int n)
{
if(cur == n)
{
int leftCnt = 0;
stringstream oss;
for(int i = 0; i < n; ++i)
{
leftCnt += (result[i])? 1: -1;
if(leftCnt < 0 || leftCnt > n/2)
break;
oss << (result[i]? '(': ')');
}
if(0 == leftCnt && oss.str().size() == n)
ret.push_back(oss.str());
}
else
{
result[cur] = true;
dfs(ret, result, cur+1, n);
result[cur] = false;
dfs(ret, result, cur+1, n);
}
}
};