LeetCode Algorithm 22. 括号生成
生活随笔
收集整理的這篇文章主要介紹了
LeetCode Algorithm 22. 括号生成
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
22. 括號生成
Ideas
這是一道動態規劃的題目,關于動態規劃的題目我們可以從n比較小的情況下開始逐步分析。
當n=1時,["()"]
當n=2時,["()()", “(())”]
當n=3時,["()()()", “(()())”, “()(())”, “(())()”, “((()))”]
什么意思呢?
當n=1,也就是只有一對括號時,只有一種情況。
當n=2時,其實是在只有一對括號的情況下添加一對括號,可以添加在左邊,也就是"()()",可以直接在外面套一層括號,也就是"(())",添加到右邊的情況就和添加到左邊的情況一樣的了。
同理,當n=3時,我們是在n=2的所有情況中添加一對括號,添加的形式有三種,左邊、右邊、外面套一層。
以此類推,如果我們知道了 i < n 時的所有情況,就可以對所有情況進行組合遍歷:
f"({i = p 時的所有情況}){i = n - 1 -p 時的所有情況}"
可以把 i = p 時的所有情況 定義為p,i = n - 1 -p 時的所有情況 定義為 q。
然后就是遍歷組合啦。
Code
Python
class Solution:def generateParenthesis(self, n: int) -> List[str]:total = [[""]]for i in range(1, n + 1):cur = list() # 用于存儲增加一對括號后可能生成的所有情況for j in range(i):item_p = total[j]item_q = total[i - 1 - j]for p in item_p:for q in item_q:cur.append(f"({p}){q}")total.append(list(cur))return total[n]總結
以上是生活随笔為你收集整理的LeetCode Algorithm 22. 括号生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015年第六届蓝桥杯 - 省赛 - J
- 下一篇: Python实现单例模式常量类