[leetcode: Python]22. Generate Parentheses

来源:互联网 发布:服装数据分析公式 编辑:程序博客网 时间:2024/05/22 15:59

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:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

解题思路:列举出所有合法的括号匹配,使用dfs。如果左括号的数量大于右括号的数量的话,就不能产生合法的括号匹配。

方法一:65ms

class Solution(object):    def generateParenthesis(self, n):        """        :type n: int        :rtype: List[str]        """        def generate(p, left, right):            if right >= left >= 0:                if not right:                    yield p                for q in generate(p + '(', left - 1, right) : yield q                for q in generate(p + ')', left, right - 1) : yield q        return list(generate('', n, n))

方法二:55ms

class Solution(object):    def deep(self,tot,ln,rn,strs,lis):        if ln<tot:            self.deep(tot,ln+1,rn,strs+'(',lis)        if rn<tot and rn<ln:            self.deep(tot,ln,rn+1,strs+')',lis)        if ln==tot and rn==tot:            lis.append(strs)    def generateParenthesis(self, n):        """        :type n: int        :rtype: List[str]        """        lis=[]        self.deep(n,0,0,'',lis)        return lis

方法三:45ms

class Solution(object):    def generateParenthesis(self, n):        """        :type n: int        :rtype: List[str]        """        def genrate(p,left,right,parens=[]):            if left:                genrate(p+ '(',left-1,right)            if right>left:                genrate(p+')',left,right-1)            if not right:                parens+=p,            return parens        return genrate('',n, n)

方法四:39ms
这个没了解

class Solution(object):    def generateParenthesis(self, n):        """        :type n: int        :rtype: List[str]        """        mp = [[""], ["()"]]        for i in xrange(2, n + 1):            mp.append([])            for j in xrange(i):                for x in mp[j]:                    for y in mp[i - 1 - j]:                        mp[i].append("(" + x + ")" + y)        return mp[-1]