LeetCode22-括号生成

最近疯狂的爱上了李宗盛大哥的歌

真的是应了那句话

年少不懂李宗盛

听懂已是曲中人

尤其是漂洋过海来看你这首歌

为你我用了半年的积蓄

飘洋过海的来看你

为了这次相聚

我连见面时的呼吸都曾反复练习

言语从来没能将我的情谊

表达千万分之一

为了这个遗憾

我在夜里想了又想不肯睡去

记忆它总是慢慢地累积

在我心中无法抹去

真的是写到心坎去了啊!

真心钦佩李宗盛大哥的文采


22-括号生成

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

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

这一题我刚开始是没做出来,或者说没有一点头绪。后来实在不行了就跑去看网上大佬的解法,一看就知道果然是要用递归的,熟悉我的读者肯定知道我是最烦用递归的,虽然它真的是好用,但我还是不感冒。这一题也是一样,用递归很简单,而且极易理解,我就不多说了,直接贴代码吧。

代码如下:

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

        def back(S='', left=0, right=0):
            if len(S) == 2 * n:
                ans.append(S)
                return
            if left < n:
                back(S + '(', left + 1, right)
            if right < left:
                back(S + ')', left, right + 1)
        back()
        return ans


if __name__ == '__main__':
    n = 3
    result = Solution().generateParenthesis(n)
    print(result)

执行效率肯定也是没得话说。

 

猜你喜欢

转载自blog.csdn.net/weixin_36431280/article/details/84424122