leetcode-22. 括號生成
阿新 • • 發佈:2019-01-29
一、問題描述
給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n =3,生成結果為:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
二、程式碼和思路
這裡使用一個遞迴函式來迭代生成新的組合,遞迴函式主要遍歷呼叫主要有三個因素決定:如果左括號和右括號都被用完了則停止並將iter_str新增到結果中;如果目前iter_str中左括號的數量小於n,則可以新增左括號;如果iter_str中右括號的數量小於左括號則可以新增右括號
class Solution:
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
result=[]
self.iter_generate(0,0,n,result,'')
return result
def iter_generate(self,left,right,n,result,iter_str):
if left==n and right==n:
result.append(iter_str)
if left<n:
self.iter_generate(left+1,right,n,result,iter_str+'(')
if right<left:
self.iter_generate(left,right+1,n,result,iter_str+')')