1. 题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/93038fcc1d13b1809ac58e21cef34468.png)
2. 思路
(1) DFS
- 由于每个位置上不是左括号就是右括号,因此,可以利用深度优先搜索遍历出所有结果。
- 对于一个合法组合,其任意前缀的左括号数量大于等于右括号数量。
3. 代码
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> res = new ArrayList<>();
dfs("", 0, 0, n, res);
return res;
}
public void dfs(String s, int lc, int rc, int n, ArrayList<String> res) {
if (lc == n && rc == n) {
res.add(s);
return;
}
if (lc < n) {
dfs(s + "(", lc + 1, rc, n, res);
}
if (rc < lc) {
dfs(s + ")", lc, rc + 1, n, res);
}
}
}