# [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/)
###### tags: `Leetcode`, `Medium`, `Stack`
## Approach
* We will use recursive approach to solve this problem
* If there are `n` opening brackets then there will be `n` closing brackets
* For every open bracket added to the stack, we will increment the `open` counter and recursively call the function. Then pop the bracket from the stack
* For every close bracket added to the stack, we will increment the `close` counter and recursively call the function. Then pop the bracket from the stack
* If `open` == `close` then we will add that combination of brackets to the result list
* return
## Code
``` python
from typing import List
class GenerateParentheses:
def generate_parentheses(self, n: int) -> List[str]:
stack, result = [], []
def backtrack(opened: int, closed: int):
if opened == closed == n:
result.append("".join(stack))
return
if opened < n:
stack.append('(')
backtrack(opened + 1, closed)
stack.pop()
if closed < opened:
stack.append(')')
backtrack(opened, closed + 1)
stack.pop()
backtrack(0, 0)
return result
print(GenerateParentheses().generate_parentheses(7))
```