Leetcode22 括號生成 遞迴

2022-09-12 22:54:17 字數 947 閱讀 6846

方法1:暴力解法

難點:

遞迴的生成所有的括號(遞迴演算法)

generateall(current, 0, combinations)  current:當前字元陣列, pos:當前寫入括號的位置, combinations:當前所有合法的長度為2n的集合

判斷括號是否合法

遍歷字元陣列,遇到'(', i++, 遇到『)』, i--; 如果括號合法,i應該是0

class

solution

//遞迴函式

public

void generateall(char current, int position, listresult)

}else

}public

boolean valid(char

current)

else

if (balance < 0)

}return balance == 0;}}

方法2:暴力解法改進

方法1在生成長度為2*n的字串後再判斷這個字串是否合法,顯然,過程中生成了很多不合法的字串

改進:在生成字串的時候就考慮只允許生成合法的字串(

若'('的數量小於n,則當前位置可以填『(』

若')'的數量小於'(',則當前位置可以填』)『

注意每次填完括號後要把當前位置還原

class

solution

public

void generateall(stringbuilder cur, listresult, int left, int right, int

pos)

else

if(right }}

}

LeetCode22 括號生成

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

leetcode 22 括號生成

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

leetcode 22 括號生成

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