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]
 |