力扣刷題Python筆記:括號生成
題目
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
python解法
這道題用的是以前沒遇到過的二叉樹,太神奇了~~
以下思路來自於力扣題解:
這道題用到了二叉樹的深度優先遍歷思想。根據上圖,我們發現:
①當左右括號的剩餘個數均為0時,停止分支;
②產生左分支時,只需要檢視是否還有剩餘的左括號;
③而產生右分支的時候,除了檢視是否剩餘右括號以外,還需要檢視右括號與左括號剩餘數量的大小,以保證字串中的左括號數量始終不小於右括號數量。
程式碼如下:
def generateParenthesis(self, n: int) -> List[str]:
result = []
cur_str = ""
def dfs(cur_str, left, right):
"""
:param cur_str: 從根結點到葉子結點的路徑字串
:param left: 左括號還可以使用的個數(剩餘個數)
:param right: 右括號還可以使用的個數
:return: None
"""
if left == 0 and right == 0: #左右括號剩餘個數都為0,停止產生分支,result存放結果
result.append(cur_str)
return
if right < left: #如果右括號剩餘個數小於左括號,說明字串中右括號放多了,回退一步
return
if left > 0: #先進行左分支
dfs(cur_str + '(', left - 1, right)
if right > 0: #再進行右分支
dfs(cur_str + ')', left, right - 1)
dfs(cur_str, n, n)
return result
相關文章
- python力扣刷題記錄——1614. 括號的最大巢狀深度Python力扣巢狀
- 力扣 22. 括號生成力扣
- 力扣刷題筆記:207. 課程表力扣筆記
- 力扣前1500道非會員題刷題筆記力扣筆記
- python力扣刷題記錄——1470. 重新排列陣列Python力扣陣列
- python力扣刷題記錄——771. 寶石與石頭Python力扣
- python力扣刷題記錄——1480. 一維陣列的動態和Python力扣陣列
- leetcode刷題筆記(3)(python)LeetCode筆記Python
- 力扣刷題——2306. 公司命名力扣
- 2024.09.22 力扣刷題 Z字形變換力扣
- 力扣刷題:100. 相同的樹力扣
- 力扣刷題-二分查詢力扣
- 力扣刷題-滑動視窗(字串)力扣字串
- 程式設計師如何玩轉力扣刷題?程式設計師力扣
- 力扣 (LeetCode) - Database-刷題626--換座位力扣LeetCodeDatabase
- leetcode:遞迴:括號生成LeetCode遞迴
- 括號生成-LeetCode22LeetCode
- LeetCode-022-括號生成LeetCode
- leetcode刷題筆記LeetCode筆記
- 刷題筆記02筆記
- 刷題筆記03筆記
- LeetCode 刷題筆記LeetCode筆記
- 22. 括號生成-c++C++
- 【題解】括號序列
- noip刷題筆記1筆記
- 【刷題筆記】2024.10.4 test筆記
- leetcode刷題筆記605LeetCode筆記
- 力扣題解力扣
- LeetCode有效的括號(Python)LeetCodePython
- 每日一題: 有效括號每日一題
- 【leetcode】leetcode22括號生成通過程式碼及題解LeetCode
- 力扣 (LeetCode) - Database-刷題183--從不訂購的客戶力扣LeetCodeDatabase
- 力扣刷題——3096.得到更多分數的最少關卡數目力扣
- 力扣刷題——2398. 預算內的最多機器人數目力扣機器人
- LeetCode - 22. 括號的生成(遞迴)1LeetCode遞迴
- leetcode刷題筆記8.5-8.9LeetCode筆記
- Leetcode刷題筆記8.12-8.16LeetCode筆記
- LeetCode刷題筆記9.2-9.9LeetCode筆記