卡塔兰数应用----所有括号的组合
2015-08-26 20:14
344 查看
vector<string> generateParenthesis(int n) { vector<string> ans; string s; if (n>0) generator(ans, s, 0, 0, n); return ans; } // l/r: number of '(' / ')' void generator(vector<string> & ans, string s, int l, int r, int n) { if (l == n) { ans.push_back(s+string().assign(n-r, ')')); return; } generator(ans, s+'(', l+1, r, n); if (l>r) generator(ans, s+")", l, r+1, n); }
void genPar(vector<char> &vt,int sum, int beg, int end, int acc) {
//第0位置肯定放(,那么和这个左括号匹配的右括号可能的位置是2*i+1,然后按照此类方法再去处理括号里面的元素和括号外面的元素
vt[beg] = '(';
++acc;
if (beg + 1 == end && acc +1 == sum){
vt[end] = ')';
for (int j=0; j< sum; ++j)
cout<<vt[j];
cout<<endl;
return;
}
for(int i = beg + 1; i<= end; i +=2 ) {
int tmp = acc;
vt[i] = ')';
if (i - beg >=3)
genPar(vt,sum,beg+1, i - 1,acc + 1);
if (end - i >=2)
genPar(vt, sum, i+1,end,acc + i -beg );
}
}
int main() {
int n =3;
vector<char> vt(2*n);
int acc = 0;
genPar(vt,2*n,0,2*n - 1,acc);
/*vector<char> vt(6);
par(3,3,vt,0);*/
}
相关文章推荐
- hdu 2546 饭卡 <01背包+贪心>
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- 【图论】[CQBZOJ1362] 苗条的生成树
- 如何紧跟android开发的潮流
- SQL入门经典3-8章节笔记
- 记录异常日志的7条规则
- HBase基础知识(6):扫描操作介绍
- 【搜索】[POJ3897]Maze Stretching
- 【搜索】[HDU1175]连连看
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- Ajax提高篇(6)服务器端脚本和程序中用 JSON 进行响应和回复
- 1027. 打印沙漏(20)
- 【原】谈谈css中关于元素定位的属性(positon&z-index)
- block,inline和inline-block概念和区别
- Android-服务与广播实现简单电话录音
- 【数论】【算术基本定理】[LightOJ1289]LCM from 1 to n
- Bitbox : a small open, DIY 32 bit VGA console
- PreparedStatement是如何大幅度提高性能的
- 彻底弄懂css中单位px和em,rem的区别
- 下载案例(一)