21 lines
536 B
Python
21 lines
536 B
Python
from backports.functools_lru_cache import lru_cache
|
|
|
|
|
|
def parenthesizations(pairs):
|
|
parenthesizations = _parenthesizations(pairs * 2, net=0)
|
|
return parenthesizations
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
def _parenthesizations(length, net=0):
|
|
if net == length:
|
|
return [')' * length]
|
|
res = prepend('(', _parenthesizations(length-1, net=net + 1))
|
|
if net > 0:
|
|
res.extend(prepend(')', _parenthesizations(length-1, net=net - 1)))
|
|
return res
|
|
|
|
|
|
def prepend(char, items):
|
|
return [char + item for item in items]
|