leetcode 22. 括号生成 [java/dfs]

268 阅读1分钟

题目

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 有效括号组合需满足:左括号必须以正确的顺序闭合。

解题思路

左边的括号数量一定要大于有边括号的数量才能保证是有效的 括号组合。直接dfs即可

代码

class Solution {
    List<String> res = new ArrayList<>();
    public List<String> generateParenthesis(int n) {
        dfs("",n,n);
        return res;
    }

    public void dfs(String str,int l,int r){
        if (l == 0 && r == 0){
            res.add(str);
            return ;
        }
        if (l == r){
            dfs(str+"(",l-1,r);
        }else if(l < r){//如果左边小于右边 ,说明"("的数量比")"多。添加左边的和右边都可以
            if (l > 0){
                dfs(str+"(",l-1,r);
            }
            dfs(str+")",l,r-1);
        }
    }
}