【算法】打印N对合理括号组合
来源:互联网 发布:js取消注释快捷键 编辑:程序博客网 时间:2024/06/01 10:45
题目:打印N对合理括号组合,比如输入3 输出
((()))
()(())
()()()
(())()
(()())
void PrinAr(char *str,int pos,int left,int right){//pos为写入的位置 if(NULL == str || left < 0 || right < left) return; if(left == 0 && right == 0) { cout<<str<<endl;//写入完毕 return ; } if(left > 0)//插入左括号的情况 { str[pos] = '('; PrinAr(str,pos+1,left-1,right); } if(right > left)//插入右括号的情况 { str[pos] = ')'; PrinAr(str,pos+1,left,right-1); }}void PrinAr(int n){ char *str = new char[2*n+1]; str[2*n] = '\0'; PrinAr(str,0,n,n); delete []str;}
思想:无疑是分治法了,具体来说是考虑要记录的状态一共有left,right,还有写入的位置Pos
然后考虑什么时候可以插入’(‘:当left只要不为0,理论上来说是可以一直插入的。这样不算违规。
再考虑什么时候不可以插入’)’:呃,肯定考虑什么时候不能插入右边吧。当发现形如())这样的就算犯规了,或者说插入的right > 插入的left,剩余的right < 剩余的left。。。。
所以反过来,当剩余的right > 剩余的left时候就可以随便插入了
0 0
- 【算法】打印N对合理括号组合
- 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)
- 打印n对括号的全部n对有效组合
- 打印n对括号匹配的所有组合
- 打印n对括号的全部有效组合
- 打印N对括号的全部有效组合
- 打印n对括号的全部有效组合
- 打印n对括号的全部有效组合(即左右括号正确配对)
- 面试编程题拾遗(06) --- 打印n对括号的全部有效组合
- N对括号的合法组合
- 输出n对括号的可能组合
- Recursion n对括号的组合 @CareerCup
- 输出n对符合的括号组合
- n对括号组合的所有情况
- 程序员面试金典: 9.9 递归和动态规划 9.6打印n对括号的全部有效组合
- 打印包含n个括号的所有合法的组合
- 9.9递归和动态规划(六)——打印n对括号的全部有效组合(即左右括号正确配对)
- 输入N对括号,输出正确的配对组合
- 数据库无法启动
- java基础笔记02
- DSP 连不上 JTAG, 'SC_ERR_PATH_BROKEN', 关注EMU1 EMU0
- 冒泡排序
- njust1922 count_prime(容斥原理)
- 【算法】打印N对合理括号组合
- java设计模式-单例模式
- 数据库事务隔离级别
- POJ3624 Charm Bracelet
- java date 各种转化
- Linux新手常见问题总结(ubuntu)
- 1006 Problem F
- IOS之CAAnimation基本动画
- (多核DSP快速入门)6.IPC的使用+实例分析