萌新練習寫程式碼的每日一練:括號生成
題目:
數字 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題
相關文章
- 每日一練(36):有效的括號
- 演算法練習題1-括號序列演算法
- 每日一練(42):Excel表序號Excel
- 每日一題: 有效括號每日一題
- 每日一練(一)
- 每日一練(二)
- Scala程式碼練習(複習用)
- sklearn基本操作程式碼練習
- 每日一練(47):找不同
- 【leetcode】leetcode22括號生成通過程式碼及題解LeetCode
- 第四天-程式碼練習
- PMP每日練習11月23日
- leetcode:遞迴:括號生成LeetCode遞迴
- 括號生成-LeetCode22LeetCode
- LeetCode-022-括號生成LeetCode
- openGauss每日一練(全文檢索)
- 每日一練(37):實現 strStr()
- 每日一練(43):同構字串字串
- 每日一練(32):左旋轉字串字串
- 安全員考試每日一練
- 每日一練(21):最小的k個數
- 力扣 22. 括號生成力扣
- 22. 括號生成-c++C++
- 每日一練(41):Excel表列名稱Excel
- 每日一練(35):最長公共字首
- 程式練習題(2)
- 程式設計練習程式設計
- 每日一練(46):兩個陣列的交集陣列
- 每日一練(27):二叉樹的深度二叉樹
- 每日一練(44):有效的字母異位詞
- markdown 使用練習練習
- 240個Python練習案例附原始碼(百看不如一練)Python原始碼
- rust學習十二、一個I/O程式練習Rust
- 學習產品快報6月W3 | 每日一練增加OJ練習題,快來測試吧~
- 每日一練(28):平衡二叉樹二叉樹
- 每日一練(40):驗證迴文串
- 每日一練(39):二進位制求和
- LeetCode - 22. 括號的生成(遞迴)1LeetCode遞迴