[LeetCode] 22. 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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
Thought process:
The idea is to recursively add and remove parentheses in a string. When the string's length reaches 2 * n, we have our base case and we can add the string to result list.
To make sure the parentheses are well-formed, we can use two counters: open and close, which tracks open parenthesis and close parenthesis respectively. When open < n, we can add more open parentheses; when close < open, we can add more close parentheses.
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Solution { public: vector<string> generateParenthesis(int n) { vector<string> parentheses; generateParentheses(n, "", parentheses, 0, 0); return parentheses; } void generateParentheses(int n, string s, vector<string>& parentheses, int open, int close) { if (s.length() == 2 * n) { parentheses.push_back(s); return; } if (open < n) { generateParentheses(n, s + "(", parentheses, open + 1, close); } if (close < open) { generateParentheses(n, s + ")", parentheses, open, close + 1); } } }; |
It's okay to overload a function with a different return type.
Time complexity:
Same as combinations: O(n!).
Comments
Post a Comment