<p>Given <code>n</code> pairs of parentheses, write a function to <em>generate all combinations of well-formed parentheses</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> n = 3
<strong>Output:</strong> ["((()))","(()())","(())()","()(())","()()()"]
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> n = 1
<strong>Output:</strong> ["()"]
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 8</code></li>
</ul>

class Solution {
public:
    vector<string> generateCombinations(string combi, int a, int b, int n) {
        vector<string> ans1 = {}, ans2 = {}, merged = {};
        if (a == n && b == n) {
            merged.push_back(combi);
            //    cout<<combi<<endl;
        } else {
            if (a < n) {
                ans1 = generateCombinations(combi + '(', a + 1, b, n);
                merged = ans1;
            }
            cout << a << "-" << b << endl;
            if (b < n && b < a) {
                ans2 = generateCombinations(combi + ')', a, b + 1, n);
                if (merged.size() == 0)
                    merged = ans2;
                else
                    merged.insert(merged.end(), ans2.begin(), ans2.end());
            }
        }
        return merged;
    }
    vector<string> generateParenthesis(int n) {
        return generateCombinations("(", 1, 0, n);
    }
};
24246