Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
We can use dfs to solve this problem. We can maintain two variables. One will record how many left parentheses have been used, another one will record how many right parentheses have been used. if the number of left parentheses is smaller than n, then we can add left parentheses, else if the number of left parentheses is bigger than left's, then we can add right parentheses.
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res=[]
self.helper(n,0,0,[],res)
return res
def helper(self,n,l,r,cur,res):
if l+r==2*n:
res.append("".join(cur))
return
if l<n:
self.helper(n,l+1,r,cur+["("],res)
if r<l:
self.helper(n,l,r+1,cur+[")"],res)