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

来源:互联网 发布:股票预测 python 编辑:程序博客网 时间:2024/06/12 05:12

很简单的一道问题,就是个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);    }}
0 0
原创粉丝点击