1. 程式人生 > >leetcode-22. 括號生成

leetcode-22. 括號生成

一、問題描述

給出 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+')')