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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
Analyse: As long as number of "(" is smaller than n, we can push "(", as long as number of ")" is smaller than "(", we can push ")".
Runtime: 0ms.
1 class Solution { 2 public: 3 vector<string> generateParenthesis(int n) { 4 vector<string> result; 5 if(!n) return result; 6 7 helper(n, 0, 0, result, ""); 8 return result; 9 } 10 11 void helper(int n, int left, int right, vector<string>& result, string temp) { 12 if(left == n && right == n) { 13 result.push_back(temp); 14 return; 15 } 16 if(left < n) helper(n, left + 1, right, result, temp + "("); 17 if(right < left && right < n) helper(n, left, right + 1, result, temp + ")"); 18 } 19 };