1. 程式人生 > >22. 括號生成

22. 括號生成

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 =3,生成結果為:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
解題思路——本題是利用溯源演算法去解的,溯源演算法可以理解為是一種試探性的全域性搜尋。窮舉出每一種可能性,把所有成功的解都返回解空間的一種演算法。對於本題很適用,另外,我是採用的遞迴來解決的這個問題。1. 首先我們來介紹一下遞迴的一般用法。大問題迴歸的條件。迴歸的操作。選擇1選擇1的遞迴選擇2選擇2的遞迴選擇n選擇n的遞迴合併所有解至解空間。end其中重點就是找到遞迴的傳遞關係,在理解遞迴的時候不要進入函式的內部做巢狀,而應該把他理解成一個黑盒子。徹底把函式抽象出來,只考慮函式的輸入輸出,實現效果。2.在本題中,重點是找到遞迴的思路。迴歸條件:如果左右括號都沒了,那麼把解返回解空間。選擇條件1:如果左括號還有,那麼就遞迴。遞迴關係: 如果左括號還有,那麼就用掉一個左括號(字串+“(”,函式中left-1)選擇條件2:如果左括號剩餘數量小於右括號剩餘數量,那麼就遞迴。遞迴關係: 用掉一個右括號