From : https://leetcode.com/problems/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> ans;
string cur;
generator(cur, 0, n, 0, n, ans);
return ans;
}
void generator(string cur, int lstart, int lend, int rstart, int rend, vector<string> &ans) {
if(lend-lstart == rend-rstart) {cur += '('; lstart++; }
if(lstart == lend) {
string s(rend-rstart, ')');
cur += s;
ans.push_back(cur);
return;
}
generator(cur+'(', lstart+1, lend, rstart, rend, ans);
generator(cur+')', lstart, lend, rstart+1, rend, ans);
}
};