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);
    }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章