生成n對括號的所有合法排列

2022-02-19 01:44:09 字數 410 閱讀 2092

例項

n = 3,所有的合法序列

左括號的個數≥右括號的個數
left個左括號和right個右括號

如果right>0 並且 right>left 列印右括號

vector generateparenthesis(int

n) void generate(int leftnum, int rightnum, string s, vector &result)

if(leftnum > 0

)

if(rightnum > 0 && leftnum

}

可以把50塊錢看成(,100塊錢看成)。只有(始終大於等於)才可以找開錢。

結論

N對括號的合法組合

遞迴實現,需要注意以下幾點 1.遞迴終止條件 2.遞迴遞推關係式 這裡實際上是乙個排列問題,只是排列需要滿足條件在每一次遞迴呼叫時左括號數不能少於右括號數。還有一點需要特別注意,當推出遞迴呼叫時相應的變數要替換掉舊的值,相當於乙個出棧的過程。include define n 20 char outp...

求n對括號的合法組合

一道經典的面試題,求n對括號有多少種合法的組合。抽象為2n個位置,每個位置可以有2種取值,總共有2 2n個組合,附加約束條件是要符合括號的語法,用來剪枝。括號語法的合法性條件 初始化左括號和右括號的剩餘數量為n,在給2n個位置賦值的過程中,需要保持剩餘的 小於等於剩餘的 遍歷的過程中,每個位置先嘗試...

生成合法的括號

給定乙個數字n,生成包含2n括號的合法序列 n 3 public listgenerateparenthesis int n private void generateall char chars,listres,int pos return chars pos generateall chars,...