Back to DSA
Generate Parentheses
mediumGiven an integer n, produce every arrangement of n pairs of parentheses that is syntactically balanced.
Examples
Example 1:
Input:
n = 2Output:
["(())","()()"] Example 2:
Input:
n = 4Output:
["(((())))","((())())","((()))()","(()(()))","(()()())","(()())()","(())(())","(())()()","()((()))","()(()())","()(())()","()()(())","()()()()"]Hints
import java.util.*;
class Solution {
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
backtrack(n, 0, 0, new StringBuilder(), result);
return result;
}
private void backtrack(int n, int open, int close, StringBuilder current, List<String> result) {
if (current.length() == 2 * n) { result.add(current.toString()); return; }
if (open < n) { current.append('('); backtrack(n, open + 1, close, current, result); current.deleteCharAt(current.length() - 1); }
if (close < open) { current.append(')'); backtrack(n, open, close + 1, current, result); current.deleteCharAt(current.length() - 1); }
}
}Time complexity
O(4^n / sqrt(n))Space complexity
O(n)