iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
Software Development

刷刷題 or Alan Becker's game 製作 is a question 系列 第 20

(Medium) 22. Generate Parentheses

  • 分享至 

  • xImage
  •  

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

  • 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
https://ithelp.ithome.com.tw/upload/images/20201005/2011151658ziGXZpsR.jpg


上一篇
(Easy) 20. Valid Parentheses
下一篇
(Hard) 23. Merge k Sorted Lists
系列文
刷刷題 or Alan Becker's game 製作 is a question 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言