LeetCode22 括號生成

2021-10-02 23:18:42 字數 707 閱讀 8639

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

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

["((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]因為所有的括號都是小括號,所以只要滿足左括號後面的右括號數量和左括號的數量相等就好了。這裡用遞迴的思路可以很好的解決。left表示還剩餘的左括號個數,right表示⽬目前需要的右括號數,一開始left = n,right = 0;當 left還剩餘左括號數⼤大於0的時候,新增左括號,並將left – 1,right + 1;當right⽬目前還需要的右括號 數⼤大於0的時候,新增右括號,並將right – 1,當left和right都等於0的時候,表示當前是⼀乙個符合格 式條件的字串串,將該字串串cur放⼊入result陣列中,後返回result。

class solution 

private:

vectorresult;

void dfs(string cur, int left, int right)

if (left > 0) dfs(cur + "(", left - 1, right + 1);

if (right > 0)dfs(cur + ")", left, right - 1);

}};

LeetCode22 括號生成

題幹 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 演算法思想 先看括號匹配,既然要達到括號匹配,就一定要滿足stack的操作 不多說 則組合數的結果則是卡特蘭數。要輸出正確組合數,可採用遞迴,用兩個變數l,r分別表示剩餘左...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 要把這個當成下棋,左括號為黑,右括號為白,則轉換為 3黑3白有幾種排列方式 每一步都有兩個選擇 下黑或者下白,但是場上下白子時剩下的黑子必須比剩下的白子多 比n 2時,有黑白黑白...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 參考官方題解 方法二 回溯法 只有在序列仍然保持有效才會新增 如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。class solu...