# 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
```