括號。設計一種算法,打印n對括號的所有合法的(例如,開閉一一對應)組合。
說明:解集不能包含重複的子集。
例如,給出 n = 2,生成結果爲:
[
“(())”,
“()()”
]
算法步驟:
前提:p,q分別代表左括號,右括號數量.
- 1.出現一個’(‘消耗一個p數量;出現一個’)'消耗一個q數量
- 2.當p>q的時候說明消耗右括號的數量多於左括號的數量。會出現())、)這種情況.
- 3.當q等於零的時候說明按照正確順序加載完畢.把正確括號加入列表.
- 4.1 p爲消耗完,消耗p
- 4.2 q未消耗完,消耗q
代碼:
class Solution:
def generateParenthesis(self, n: int):
re = []
state = ''
def dsp(state, p, q):
if p > q: # 右括號多於左括號,結束
return
if q == 0:
re.append(state)
if p > 0:
dsp(state + '(', p - 1, q) # 消耗左括號
if q > 0:
dsp(state + ')', p, q - 1) # 消耗右括號
dsp(state, n, n)
return re
print(Solution().generateParenthesis(2))
代入:n=2