力扣刷題Python筆記:括號生成

見夏莫語冰發表於2020-10-07

題目

數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。

在這裡插入圖片描述

python解法

這道題用的是以前沒遇到過的二叉樹,太神奇了~~

以下思路來自於力扣題解:

在這裡插入圖片描述
這道題用到了二叉樹的深度優先遍歷思想。根據上圖,我們發現:
①當左右括號的剩餘個數均為0時,停止分支;
②產生左分支時,只需要檢視是否還有剩餘的左括號;
③而產生右分支的時候,除了檢視是否剩餘右括號以外,還需要檢視右括號與左括號剩餘數量的大小,以保證字串中的左括號數量始終不小於右括號數量。

程式碼如下:

def generateParenthesis(self, n: int) -> List[str]:
    result = []
    cur_str = ""

    def dfs(cur_str, left, right):
        """
        :param cur_str: 從根結點到葉子結點的路徑字串
        :param left: 左括號還可以使用的個數(剩餘個數)
        :param right: 右括號還可以使用的個數
        :return: None
        """
        if left == 0 and right == 0: #左右括號剩餘個數都為0,停止產生分支,result存放結果
            result.append(cur_str)
            return
        if right < left: #如果右括號剩餘個數小於左括號,說明字串中右括號放多了,回退一步
            return
        if left > 0:  #先進行左分支
            dfs(cur_str + '(', left - 1, right)
        if right > 0:  #再進行右分支
            dfs(cur_str + ')', left, right - 1)

    dfs(cur_str, n, n)
    return result

相關文章