problem:
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
算法一:可以根据之前括号匹配的算法,把括号所有出现的可能进行一个全排列后,进行一个筛选,比较麻烦,但是可以解决
算法二:我们知道输入的n为左括号和右括号的个数,必定先有左括号再有右括号,那么我们可以根据这个进行递归计算
假设我们输入n,那么左括号个数 left = n,右括号个数right = n
先有左侧括号,才可以有右侧括号,因此
我们先为空字符串s添加一个左侧括号,然后让left = left-1
如果right<left说明,缺少右侧括号,那么我们再向s中加入右侧括号
当right == 0 and left ==0,说明没有多余的括号可以使用了
那么我们将此时的s加入到列表中
代码如下:
1 lass Solution(object): 2 def generateParenthesis(self, n): 3 """ 4 :type n: int 5 :rtype: List[str] 6 """ 7 ans = [] 8 self.partten(ans,'',n,n) 9 return ans 10 def partten(self,ans,s,right,lift): 11 if(right==0 and lift==0): 12 ans.append(s) 13 return 14 if(lift>0): 15 self.partten(ans,s+'(',right,lift-1) 16 if(right>lift): 17 self.partten(ans,s+')',right-1,lift)