LetCode—22.括号生成dfs

题目:括号生成

在这里插入图片描述

思路

1.分析问题:生成所有可能的并且有效的组合?问题是让我们罗列所有的可能性,很容易想到遍历搜索,那么常见的搜索方式有dfs和bfs。这里用dfs。
2.该怎么用dfs:平常都在树结构中使用dfs,可以将此题设置成数结构的环境
画个图
解释一下下面的灵魂图,根节点是“”,往左是左括号,往右是右括号
如何将题目场景与树结构匹配呢?除了节点内容,还需要有指向左子树和右子树的箭头,我们用int left和right来表示,left+1表示指向左子树,right+1表示指向右子树;
写dfs的步骤
a.边界条件:什么时候可以结束呢?当然是如下,左右括号的数量都要等于n,才能保证括号是有效的;

   	left==n&&right==n)

b.要排除无效的括号,也就是递归中的剪枝:left<right的时候是无效的
c.剩下正常的左右子树遍历;

在这里插入图片描述

代码

class Solution {
	List<String>  list=new ArrayList<>();
    public List<String> generateParenthesis(int n) {
    	dfs("",0,0,n);
    	return list;
    }
    public void dfs(String  str,int left,int  right,int n){
    		if(left==n&&right==n){
    			 list.add(str);
    			 return;
    		}
    		if(left<right) return;
    		if(left<n) dfs(str+"(",left+1,right,n);
    		if(right<n) dfs(str+")",left,right+1,n);
    }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章