leetcode--22. 括号生成

有一段时间没写了,再进leetcode发现有了中国区的网站。

题目:22. 括号生成

链接:https://leetcode-cn.com/problems/generate-parentheses/description/

给定正整数N,要求输出N对括号的所有合法组合。之前总是把一对括号一起考虑,及在N-1对括号的基础上增加一对,于是当N=4的时候少了这种情况 (())(()),后面的递归结果自然就少了一些。下面是别人的思路:

左括号和右括号分开考虑,其个数分别用left和right表示(注意起头第一个一定是左括号)。当左括号的个数left=N时,只能添加右括号。递归终止条件为left+right==2*N,此时将该组合加入结果集。

Python代码:

class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """

        # def getans(n, res, ans):
        #     if n == 0:
        #         if res not in ans:
        #             ans.add(res)
        #             return
        #     else:
        #         getans(n - 1, res + "()", ans)
        #         getans(n - 1, "()" + res, ans)
        #         getans(n - 1, "(" + res + ")", ans)
        #
        # ans = set()
        # getans(n, "", ans)

        def getret(n, left, right, ret, ans):
            if left + right == n * 2:
                ans.add(ret)
                return
            if left < n:
                getret(n, left + 1, right, ret + "(", ans)
                if right < left:
                    getret(n, left, right + 1, ret + ")", ans)
            else:
                getret(n, left, right + 1, ret + ")", ans)

        ans = set()
        getret(n,0,0,"",ans)


        return list(ans)

你可能感兴趣的:(leetcode)