萌新練習寫程式碼的每日一練:括號生成
題目:
數字 n 代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:用dfs去做,先去思考應該怎麼填,第一個肯定是(,不然當場去世。之後第二個既可以是(也可以是),假設填到了第n個括號,需要去判斷是填(還是),這時候先研究(的條件,顯然只要(沒用完,隨便填,肯定有對應的)來兜底,然後是研究),假設當前狀況是()(),下一個一定是(,不然會破壞平衡,也就是說)的條件為:右括號數量<左括號數量,理清了這個思路之後就可以用遞迴求解了,設left和right是剩餘的(和)的數量,當left==0 and right==0時,終止遞迴併輸出。
程式碼:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
cur_str = ''
def dfs(left, right, cur_str):
if left==0 and right==0:
res.append(cur_str)
return 0
if left > 0:
dfs(left - 1, right, cur_str + '(')
if left < right:
dfs(left, right - 1, cur_str + ')')
dfs(n, n, cur_str)
return res
題目來自於LeetCode第22題
相關文章
- 演算法練習題1-括號序列演算法
- 每日一練(42):Excel表序號Excel
- 每日一題: 有效括號每日一題
- 【練習】銀行排號程式
- 程式設計練習-自己寫一個strcpy程式設計
- [C練習]蛇形程式碼
- Scala程式碼練習(複習用)
- sklearn基本操作程式碼練習
- Python指令碼練習一Python指令碼
- matlab每日練習 lenght函式Matlab函式
- 每日一練(43):同構字串字串
- 每日一練(32):左旋轉字串字串
- 每日一練(37):實現 strStr()
- 第四天-程式碼練習
- 每日一練(41):Excel表列名稱Excel
- openGauss每日一練(全文檢索)
- 【練習】學生成績管理系統
- 每日一練(46):兩個陣列的交集陣列
- 每日一練(27):二叉樹的深度二叉樹
- 程式設計練習程式設計
- 程式練習題(2)
- 學習產品快報6月W3 | 每日一練增加OJ練習題,快來測試吧~
- 學習 golang 中,寫了個 golang http client 練練手GolangHTTPclient
- 22. 括號生成-c++C++
- 力扣 22. 括號生成力扣
- 每日一練(39):二進位制求和
- 每日一練(28):平衡二叉樹二叉樹
- 每日一練(45):長度最小的子陣列陣列
- 每日一練(16):對稱的二叉樹二叉樹
- 240個Python練習案例附原始碼(百看不如一練)Python原始碼
- python 檔案讀寫練習Python
- matlab練習程式(碎片)Matlab
- mathematica練習程式(影象取反)
- 練習時的docker部署指令碼Docker指令碼
- 括號生成-LeetCode22LeetCode
- leetcode:遞迴:括號生成LeetCode遞迴
- [LeetCode] Generate Parentheses 生成括號LeetCode
- 序列模型第一週程式設計練習模型程式設計