Generate Parentheses

• Time:O(2^{2n})
• Space:O(n)

C++

``````class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;

dfs(n, n, "", ans);
return ans;
}

private:
void dfs(int l, int r, string&& path, vector<string>& ans) {
if (l == 0 && r == 0) {
ans.push_back(path);
return;
}

if (l > 0) {
path.push_back('(');
dfs(l - 1, r, move(path), ans);
path.pop_back();
}
if (l < r) {
path.push_back(')');
dfs(l, r - 1, move(path), ans);
path.pop_back();
}
}
};
``````

JAVA

``````class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<>();

dfs(n, n, new StringBuilder(), ans);
return ans;
}

private void dfs(int l, int r, final StringBuilder sb, List<String> ans) {
if (l == 0 && r == 0) {
return;
}

if (l > 0) {
sb.append("(");
dfs(l - 1, r, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
if (l < r) {
sb.append(")");
dfs(l, r - 1, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
}
}
``````

Python

``````class Solution:
def generateParenthesis(self, n):
ans = []

def dfs(l: int, r: int, s: str) -> None:
if l == 0 and r == 0:
ans.append(s)
if l > 0:
dfs(l - 1, r, s + '(')
if l < r:
dfs(l, r - 1, s + ')')

dfs(n, n, '')
return ans
``````