LeetCode代码分析——22. Generate Parentheses(DFS模板题)

xiaoxiao2021-02-28  69

很简单的一道问题,就是个DFS(深度优先搜索)的问题,我能想到,但是我不会。。。 所以结合本题总结下递归和DFS的解决方法。 如下图,执行的时候按从左到右的顺序,先递归执行左子树,再递归执行右子树。

代码如下:

public class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<>(); dfs(n, n, "", result); return result; } public static void dfs(int lefts, int rights, String s, List<String> result){ //递归出口,找到了一个正确结果 if (lefts == 0 && rights == 0){ result.add(s); } //第一次递归,左子树 if (lefts > 0) { dfs(lefts-1, rights, s+'(', result); } //第二次递归,右子树 if (rights > 0 && lefts < rights) { dfs(lefts, rights-1, s+')', result); } //隐藏出口,就是各种不合法的结果,比如lefts>rights,左括号有富余 } public static void main(String[] args) { Solution solution = new Solution(); List<String> result = solution.generateParenthesis(2); System.out.println(result); } }
转载请注明原文地址: https://www.6miu.com/read-38919.html

最新回复(0)