LeetCode22-括號生成
阿新 • • 發佈:2018-12-08
最近瘋狂的愛上了李宗盛大哥的歌
真的是應了那句話
年少不懂李宗盛
聽懂已是曲中人
尤其是漂洋過海來看你這首歌
為你我用了半年的積蓄
飄洋過海的來看你
為了這次相聚
我連見面時的呼吸都曾反覆練習
言語從來沒能將我的情誼
表達千萬分之一
為了這個遺憾
我在夜裡想了又想不肯睡去
記憶它總是慢慢地累積
在我心中無法抹去
真的是寫到心坎去了啊!
真心欽佩李宗盛大哥的文采
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)
執行效率肯定也是沒得話說。