面试题 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
在这里插入图片描述

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