題目描述
解題思路
首先看到題目,一開始是并沒有思路的。這時候可以在紙上進行演算一下結果。當只有一對括號的時候,我們可以得知結果[“()”],當有兩對括號的時候,我們可以發現,括號在第一個基礎上,要么在括號內部出現,要么在括號外部出現。用公式來表達就是(+p+)+q。p和q代表的是一對括號可能存在的地方。以此類推,當有n對括號的時候,假設p=i,q=n-i-1。這時候大家應該知道這題目是怎么一回事了,這時候就是需要我們實現這一個過程。首先,我們需要定義一個列表,這個列表中存放著所有的括號存在的情況,下標就代表第i個括號對對應的情況。具體如下:
首先檢查輸入的 n 是否為 0,如果是,則直接返回一個空列表 [],因為在這種情況下無法生成有效的括號組合。
初始化一個列表 result,用于存儲不同組合情況下的括號序列。首先將空字符串 “” 和單對括號 () 分別作為 n=0 和 n=1 時的初始情況加入到 result 中。
接下來,對于 n 從 2 到輸入的 n 的范圍進行循環,依次生成包含 n 對括號的有效括號組合。
在每一輪循環中,通過兩個嵌套的循環,分別遍歷內部括號和外部括號的組合情況。對于每一對內外括號組合,將內部括號組合和外部括號組合進行組合,形成新的括號序列,并將這些新的括號序列添加到 new_combinations 列表中。
將生成的新的括號序列列表 new_combinations 添加到 result 中,以便在下一輪循環中使用。
最后,返回 result[n],即包含 n 對括號的有效括號組合列表
代碼如下
from typing import Listclass Solution:def generateParenthesis(self, n: int) -> List[str]:if n == 0:return []result = []result.append([""]) # 初始化n=0和n=1時的情況result.append(["()"])for i in range(2, n + 1):new_combinations = []for j in range(i):inside = result[j]outside = result[i - 1 - j]for inside_str in inside:for outside_str in outside:new_combinations.append("(" + inside_str + ")" + outside_str)result.append(new_combinations)return result[n]