LeetCode Solutions
22. Generate Parentheses
Time: $O(2^{2n})$ Space: $O(n)$
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();
}
}
};
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) {
ans.add(sb.toString());
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);
}
}
}
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