Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
well-formed : 一開一關 且 先開再關 也就是說 不行是 ")("
Example 1:
Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]
Example 2:
Input: n = 1
Output: ["()"]
Constraints:
1 <= n <= 8
8 個可能 都 驗驗看 再Summit
Hint
組合 > 自己呼叫自己(遞迴) > 想停止條件&&邏輯
邏輯
Step 0 : 先觀察 ...
停止條件 : 長度湊齊 nx2
長度 就 return
阿怎麼組 我就觀察Reference 影片 QQ : Java 版 理解一番 轉成自己的 Python3 版
n pair 代表 n個左括弧+n個右括弧
if 左括弧數量 還不等於 n : 可以繼續加 左括弧 -- 第一個 if
if 右括弧數量 小於 左括弧數量 : 繼續加 右括弧 -- 第二個 if
Reference
LeetCode 22. Generate Parentheses
神奇的地方: local端 Output 正常 Summit remote Output 就跑掉?
ansList = []
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
curStr=""
self.dfs(curStr,n,0,0)
return ansList
def dfs(self,curStr:str,n:int,openCnt:int,closeCnt:int):
if len(curStr) == n*2:
ansList.append(curStr)
return
else:
if openCnt < n:
self.dfs(curStr+'(',n,openCnt+1,closeCnt)
if closeCnt<openCnt:
self.dfs(curStr+')',n,openCnt,closeCnt+1)
所以 save答案的 ansList 以參數傳 !
正解
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ansList = []
curStr=""
self.dfs(curStr,n,0,0,ansList)
return ansList
def dfs(self,curStr:str,n:int,openCnt:int,closeCnt:int,ansList:[]):
if len(curStr) == n*2:
ansList.append(curStr)
return
else:
if openCnt < n:
self.dfs(curStr+'(',n,openCnt+1,closeCnt,ansList)
if closeCnt<openCnt:
self.dfs(curStr+')',n,openCnt,closeCnt+1,ansList)
Result