此文首發於我的個人博客:LeetCode 22. Generate Parentheses–Python 解法–廣度優先、深度優先解法 — zhang0peter的個人博客
LeetCode題解文章分類:LeetCode題解文章集合
LeetCode 所有題目總結:LeetCode 所有題目總結
題目地址:Generate Parentheses - LeetCode
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
這道題目看起來不難,只要把所有的可能性都輸出即可。
可以深度優先,或者廣度優先解決。
廣度優先的Python解法如下,先輸出 ()()()...
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def helper(s='', left=0, n=0):
if n == 0:
self.res.append(s+')'*left)
return
if left > 0:
helper(s+')', left-1, n)
helper(s+'(', left+1, n-1)
self.res = []
helper('', 0, n)
return self.res
深度優先解法如下,先 ((()))
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def helper(s='', left=0, n=0):
if n == 0:
self.res.append(s+')'*left)
return
helper(s+'(', left+1, n-1)
if left > 0:
helper(s+')', left-1, n)
self.res = []
helper('', 0, n)
return self.res