日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python 生成括號 LeetCode 22

系統 1831 0

Python 生成括號 LeetCode 22_第1張圖片
解法:1、n代表的是左括號和右括號的個數,最后生成的字符串的長度為2n,首先想到的就是枚舉的方法,假設有2n的數組,每一個格子都有兩種情況,填做括號還是右括號。
2、很明顯上面的方法是不符合常理的,因為做括號和右括號都是有限制,當n為3的時候,不會出現((((((的情況,所以當我們進行遞歸的時候,就需要進行判斷,當左括號用完的時候就要停止,稱為剪枝。
3、動態規劃解法,當看到有和沒有,放和不放的時候,可以考慮動態規劃的解法。這里有個leetcode上面的講解動態規劃解法,
4、我補充一下我的見解和理解(其實是我沒有很快理解他文章的意思),幫助你從不同的思路上理解。
首先,面向小白:什么是動態規劃?在此題中,當知道所有 i=n-1 的情況時,我們可以通過對之前的情況來算出 i=n 的情況。
本題最核心的思想是,考慮 i=n 時相比 n-1 組括號增加的那一組括號的位置。(ps:建議參考本博客動態規劃篇,從簡單的斐波拉契數列,背包問題開始)
【思路】:
如果你看了本博客的動態規劃內容或者有一定寫動態規劃的經驗的話,會明白對于動態規劃問題的我們要找的就是最優子問題,也就是遞推公式。
假設一種情況,我們已經知道了i=n-1時括號的可能生成排列后,對于i=n的情況,我們只需要把這個完整的“()”放到n-1的排列中就可以了。有兩種情況,一個是這對新加的括號,左括號和右括號里面加入一些在n-1的括號排列組合,或者是這對新加的括號,添加到排列組合中。
舉一個栗子,當n=2的時候,排列組合符合條件的是這兩種,"(())","()()",那我們把“()”放在其中會出現哪幾種情況,"((()))","(())()","(())()","()(())","()()()",
由于能力有限,不知道用什么數據結構來進行很好的插入。暫無代碼,希望有看到相同思路的戰友,或者能寫出來的,留言一下讓我好好學習一下,辛苦了。

            
              
                #第二種方法
              
              
                class
              
              
                Solution
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                generateParenthesis
              
              
                (
              
              self
              
                ,
              
               n
              
                )
              
              
                :
              
              
                """
        :type n: int
        :rtype: List[str]
        """
              
              
                #list輸出的是最后結果,如n等于3,那么list里面就是裝的所有可能性
              
              
        self
              
                .
              
              
                list
              
              
                =
              
              
                [
              
              
                ]
              
              
                #left和right里面存的是括號使用了多少
              
              
        self
              
                .
              
              _gen
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                ,
              
               n
              
                ,
              
              
                ""
              
              
                )
              
              
                return
              
               self
              
                .
              
              
                list
              
              
                def
              
              
                _gen
              
              
                (
              
              self
              
                ,
              
               left
              
                ,
              
               right
              
                ,
              
               n
              
                ,
              
               result
              
                )
              
              
                :
              
              
                if
              
               left 
              
                ==
              
              n 
              
                and
              
               right 
              
                ==
              
              n
              
                :
              
              
            self
              
                .
              
              
                list
              
              
                .
              
              append
              
                (
              
              result
              
                )
              
              
                if
              
               left
              
                <
              
              n
              
                :
              
              
            self
              
                .
              
              _gen
              
                (
              
              left
              
                +
              
              
                1
              
              
                ,
              
               right
              
                ,
              
               n
              
                ,
              
               result
              
                +
              
              
                "("
              
              
                )
              
              
                if
              
               left 
              
                >
              
               right 
              
                and
              
               right 
              
                <
              
               n
              
                :
              
              
            self
              
                .
              
              _gen
              
                (
              
              left
              
                ,
              
               right
              
                +
              
              
                1
              
              
                ,
              
               n
              
                ,
              
               result
              
                +
              
              
                ")"
              
              
                )
              
            
          
            
              
                class
              
              
                Solution
              
              
                :
              
              
                def
              
              
                generateParenthesis
              
              
                (
              
              self
              
                ,
              
               n
              
                :
              
              
                int
              
              
                )
              
              
                -
              
              
                >
              
               List
              
                [
              
              
                str
              
              
                ]
              
              
                :
              
              
                if
              
               n 
              
                ==
              
              
                0
              
              
                :
              
              
                return
              
              
                [
              
              
                ]
              
              
        total_l 
              
                =
              
              
                [
              
              
                ]
              
              
        total_l
              
                .
              
              append
              
                (
              
              
                [
              
              
                None
              
              
                ]
              
              
                )
              
              
                # 0組括號時記為None
              
              
        total_l
              
                .
              
              append
              
                (
              
              
                [
              
              
                "()"
              
              
                ]
              
              
                )
              
              
                # 1組括號只有一種情況
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                2
              
              
                ,
              
              n
              
                +
              
              
                1
              
              
                )
              
              
                :
              
              
                # 開始計算i組括號時的括號組合
              
              
            l 
              
                =
              
              
                [
              
              
                ]
              
              
                for
              
               j 
              
                in
              
              
                range
              
              
                (
              
              i
              
                )
              
              
                :
              
              
                # 開始遍歷 p q ,其中p+q=n-1 , j 作為索引
              
              
                now_list1 
              
                =
              
               total_l
              
                [
              
              j
              
                ]
              
              
                # p = j 時的括號組合情況
              
              
                now_list2 
              
                =
              
               total_l
              
                [
              
              i
              
                -
              
              
                1
              
              
                -
              
              j
              
                ]
              
              
                # q = (i-1) - j 時的括號組合情況
              
              
                for
              
               k1 
              
                in
              
               now_list1
              
                :
              
              
                for
              
               k2 
              
                in
              
               now_list2
              
                :
              
              
                if
              
               k1 
              
                ==
              
              
                None
              
              
                :
              
              
                            k1 
              
                =
              
              
                ""
              
              
                if
              
               k2 
              
                ==
              
              
                None
              
              
                :
              
              
                            k2 
              
                =
              
              
                ""
              
              
                        el 
              
                =
              
              
                "("
              
              
                +
              
               k1 
              
                +
              
              
                ")"
              
              
                +
              
               k2
                        l
              
                .
              
              append
              
                (
              
              el
              
                )
              
              
                # 把所有可能的情況添加到 l 中
              
              
            total_l
              
                .
              
              append
              
                (
              
              l
              
                )
              
              
                # l這個list就是i組括號的所有情況,添加到total_l中,繼續求解i=i+1的情況
              
              
                return
              
               total_l
              
                [
              
              n
              
                ]
              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黑河市| 陆良县| 广德县| 洪雅县| 高唐县| 文山县| 玛纳斯县| 凉山| 和平区| 新源县| 云浮市| 嵊州市| 柏乡县| 汝州市| 白银市| 东源县| 鸡西市| 安阳市| 普安县| 萝北县| 肥城市| 宜川县| 迭部县| 辽源市| 平邑县| 太和县| 长兴县| 南京市| 石狮市| 巢湖市| 万安县| 满洲里市| 鹤峰县| 枣庄市| 瑞昌市| 黎城县| 彭阳县| 万盛区| 嵊泗县| 班戈县| 曲阳县|