---
# System prepended metadata

title: Leetcode 22. Generate Parentheses

---

# Leetcode 22. Generate Parentheses

## 題解

### DFS Back Tracking

```python!
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        output = []
        def dfs(left: int, right: int, ans: str):
            if left < right or left > n or right > n: # 邏輯是如果左右配對，一定是左邊一個右邊一個，所以可以判定，如果右邊大於左邊，就代表這個組合是不可能的，直接剪枝，如果左邊或右邊大於需要配對的總長度，也剪枝
                return
            if n == left and n == right: # 左右剛好都等於需要的長度，代表這是我們想要的解答，加進解答裡面
                output.append(ans)
            else: # 窮舉所有組合
                dfs(left+1,right,ans+"(")
                dfs(left,right+1,ans+")")
        dfs(0,0,"")
        return output
```