每日一題,每日一練 25括號生成(回溯的要點就在於,一個個試)

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

示例:
輸入:n = 3
輸出:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

這道題的簡單于思路,難於寫,利用單向思維,我們的每個問題就是,當前狀態我們能加“(”還是”)“,然後不斷地去遍歷可能性,直到所有的“(”和”)“被用完(這裏是3)
那麼代碼如下:

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        a=""
        end=[]
        left=n
        right=n
        def check(a,c,v):
            if(len(a)>=2*n):
                if(a not in end):
                    end.append(a)
                return
            if(c>0):
                a=a+"("
                check(a,c-1,v)
                a=a[:-1]
            if(a!=""):
                if(c<v):
                    a=a+")"
                    check(a,c,v-1)
                    a=a[:-1]
        check(a,left,right)
        return end

當前狀態回溯完需要刪掉最後一個變成基準狀態,否則另外一種可能無法在基準狀態疊加。
這得多深的棧==

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