面試題 08.09. 括號

括號。設計一種算法,打印n對括號的所有合法的(例如,開閉一一對應)組合。

說明:解集不能包含重複的子集。

例如,給出 n = 2,生成結果爲:
[
“(())”,
“()()”
]
算法步驟:
前提:p,q分別代表左括號,右括號數量.

  • 1.出現一個’(‘消耗一個p數量;出現一個’)'消耗一個q數量
  • 2.當p>q的時候說明消耗右括號的數量多於左括號的數量。會出現())、)這種情況.
  • 3.當q等於零的時候說明按照正確順序加載完畢.把正確括號加入列表.
  • 4.1 p爲消耗完,消耗p
  • 4.2 q未消耗完,消耗q

代碼

class Solution:
    def generateParenthesis(self, n: int):
        re = []
        state = ''

        def dsp(state, p, q):
            if p > q:  # 右括號多於左括號,結束
                return
            if q == 0:
                re.append(state)
            if p > 0:
                dsp(state + '(', p - 1, q)  # 消耗左括號
            if q > 0:
                dsp(state + ')', p, q - 1)  # 消耗右括號

        dsp(state, n, n)
        return re
        
print(Solution().generateParenthesis(2))

代入:n=2
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章