亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python 生成括號 LeetCode 22

系統 1806 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條評論
主站蜘蛛池模板: 国产日本亚洲 | 九九99热久久精品在线6手机 | 日韩精品视频观看 | 久久免费大片 | 成人一区二区免费中文字幕 | 久草精品视频在线观看 | 亚洲综合色婷婷在线观看 | 欧美日韩亚洲国产精品一区二区 | 四虎影视在线观看2022a | 国产99福利视频在线 | 奇米第四色在线观看 | 爱爱永久免费视频网站 | 亚洲国产精久久久久久久 | 国产成人午夜性视频影院 | 天天干天天操天天摸 | 国产尤物视频 | 天天做天天爱夜夜爽女人爽宅 | 四虎国产精品一区二区 | 亚洲欧美日韩综合 | 欧美一级毛片免费看 | 欧美黑大粗硬毛片视频 | 成年人视频在线免费 | 啪啪婷婷| 99精品国产兔费观看66 | 视频一区久久 | 黄 色 免 费 网站在线观看 | 欧美日韩亚洲国产无线码 | 久久99综合国产精品亚洲首页 | 精品成人一区二区三区免费视频 | 久久久久久久久中文字幕 | 日本精品久久久久中文字幕 1 | 国内精自品线一区91 | 99这里只有精品 | 香蕉久久ac一区二区三区 | 亚洲码欧美码一区二区三区 | 伊人色网站 | 精品一区二区久久 | 久久综合玖玖爱中文字幕 | 久热网站 | 免费黄色视屏网站 | 青青青在线视频人视频在线 |