列印n對括號的全部有效組合(即左右括號正確配對)

2021-06-27 01:40:01 字數 381 閱讀 3153

題目:《程式設計師面試金典(第5版)》p230  實現一種演算法,列印n對括號的全部有效組合(即左右括號正確配對)。

//res是引用傳遞,left是左括號的剩餘數量,right是右括號剩餘數量

void generateparenthesescore(string cur,vector&res,int left,int right)

if(left>0)//有左括號可用

if(leftgenerateparentheses(int n)

string cur("()");

generateparenthesescore(cur,res,n-1,n-1);

return res;

}

N對括號的合法組合

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

n對括號的排列組合

列印n對括號的排列組合。遞迴思想,左括號數量小於n的時候則可以繼續插入左括號,右括號數量小於n且小於左括號數量時為了滿足左右括號相等則插入右括號,終止條件 當string的長度為2n的時候停止並push到vector裡面。注意條件 vector必須用引用,否則每次遞迴都會建立新拷貝。string需要...

求n對括號的合法組合

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