---
# System prepended metadata

title: 22. Generate Parentheses
tags: [Leetcode, medium, python, backtracking, Top 100 Liked Questions]

---

###### tags: `Leetcode` `medium` `backtracking` `python` `Top 100 Liked Questions`

# 22. Generate Parentheses

## [題目連結:] https://leetcode.com/problems/generate-parentheses/

## 題目:
Given ```n``` pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

 
**Example 1:**
```
Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]
```
**Example 2**:
```
Input: n = 1
Output: ["()"]
```

## 解題想法:
* 要求輸出n對括號的所有合法組合
    * 當長度=2*n 表示可以加入res
    * 先判斷左刮是否有剩
        * 遞迴求(左數量+1,右數量)
    * 再判斷右括是否數量<左刮數量(確保合法)
        * 遞迴求(左數量,右數量+1)

## Python:
``` python=
class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        self.res = []
        cur = ""
        self.dfs(cur,n,0,0)
        return self.res
    def dfs(self,cur,n,left,right): #左括右括
        #若總數已滿即可加到ans
        if len(cur)==n*2:
            self.res.append(cur)
            return None
        #若還有多餘的(
        if left<n:
            self.dfs(cur+"(",n,left+1,right)
        #若目前的)量小於(
        if right<left:
            self.dfs(cur+")",n,left,right+1)
                
if __name__ == '__main__':
    result = Solution()
    ans = result.generateParenthesis(3)
    print(ans)
```
