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)

 

posted on 2018-02-01 15:38  Qarnet  阅读(87)  评论(0)    收藏  举报