读书人

输出n对括号的或许组合

发布时间: 2013-09-13 21:12:00 作者: rapoo

输出n对括号的可能组合

转载请注明来自souldak,微博:@evagle

怎么样才是合法的组合?

只要每一时刻保证左括号的数目>=右括号的数目即可。

直接递归就行,每次递归加一个括号,左括号只要还有就能加,右括号要保证加进去之后右括号总数不大于左括号总数


void insert_parentheses(char *res, int l, int r){    if(l==0&&r==0)        cout<<res;    else{        if(l>0){            res[n-l-r]='(';             insert_parenthese(res,l-1,r);        }        if(r>l){            res[n-l-r] = ')';            insert_parenthese(res,l,r-1);        }      } }

例如2的时候

(

(),((

()(,(()

()(),(())

只有两种合法组合

另外如果不是求组合而是求可能的方案的话解法是catalan数,可以参考下一篇文章:上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章

读书人网 >其他相关

热点推荐