Table of Contents
Problem Statement
The Generate Parentheses LeetCode Solution – “Generate Parentheses” states that given the value of n. We need to generate all combinations of n pairs of parentheses.
Return the answer in the form of a vector of strings of well-formed parentheses.
Example:
Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]
Explanation:
- All well-formed parentheses are:- [“((()))”,”(()())”,”(())()”,”()(())”,”()()()”].
Input: n = 1
Output: ["()"]
Explanation:
- All well-formed parentheses are:- [“()”].
Approach
Idea:
- The main idea to solve this problem is to use Recursion.
- The Brute force approach is to consider every type of parentheses at each index and go to the next step of recursion, and check whether this lead to valid well-formed parentheses? If Yes, store the string as our answer, otherwise backtrack.
- For an efficient solution, Start with an empty string and n number of open and close brackets (since we need to form n pairs).
- At each step of recursion, the following cases hold:
- Base Case: When a number of open and close brackets are both equal to n, store the current string as our answer.
- When the number of opening brackets is strictly less than n, we can place the open bracket now.
- When the number of closing brackets is strictly less than the number of closing brackets, we need to place the closing bracket now.
- Whenever we’ll reach the base case, we will store the string formed into our answer which is the well-formed parentheses.
- Return all the well-formed parentheses as our answer, in the form of a vector of strings.
Code
Generate Parentheses Leetcode C++ Solution:
class Solution { public: vector<string> ans; void recurse(string s,int open,int close,int n){ if(open==n and close==n){ ans.push_back(s); return; } if(open<n) recurse(s+"(",open+1,close,n); if(close<open) recurse(s+")",open,close+1,n); } vector<string> generateParenthesis(int n) { recurse("",0,0,n); return ans; } };
Generate Parentheses Leetcode Java Solution:
class Solution { public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<String>(); backtrack(list, "", 0, 0, n); return list; } public void backtrack(List<String> list, String str, int open, int close, int max){ if(str.length() == max*2){ list.add(str); return; } if(open < max){ backtrack(list, str+"(", open+1, close, max); } if(close < open){ backtrack(list, str+")", open, close+1, max); } } }
Complexity Analysis for Generate Parentheses Leetcode Solution
Time Complexity
The time complexity of the above code is O(2^(2N)) since in the worst case we need to consider every possibility of opening and closing brackets where N = the number of pairs we need to form.
Space Complexity
The space complexity of the above code is O(N).