1. 程式人生 > >LeetCode22-括號生成

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)

執行效率肯定也是沒得話說。