leetcode——backtracking[1] Generate Parentheses ,Catalan数——卡特兰数
来源:互联网 发布:幼儿园网站整站源码 编辑:程序博客网 时间:2024/05/16 09:39
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:"((()))", "(()())", "(())()", "()(())", "()()()"
简单的回溯:
bool isCurPaOk(char *tmp,int i,int n){ int left = 0,right = 0; for(int j=0;j<=i;j++) { if(tmp[j]=='(') { left++; } else { right++; } } if(right>left || left > n) { return false; } else { return true; } } void genePa(int i,int n,char** ret,int*returnSize,char *tmp){ if(i==2*n - 1) { tmp[i]=')';tmp[2*n]='\0'; char *col=(char*)malloc((2*n+1)*sizeof(char)); memcpy(col,tmp,(2*n+1)*sizeof(char)); // if(*returnSize > n*n - 1) // { // ret=realloc(ret,n*n*n*sizeof(char*)); // } ret[*returnSize]=col; (*returnSize)++; return; } tmp[i]='('; if(isCurPaOk(tmp,i,n)) { genePa(i+1,n,ret,returnSize,tmp); } tmp[i]=')'; if(isCurPaOk(tmp,i,n)) { genePa(i+1,n,ret,returnSize,tmp); } }char** generateParenthesis(int n, int* returnSize) { *returnSize = 0; char** ret = (char**)malloc(n*n*n*n*sizeof(char*)); char *tmp=(char*)malloc((2*n+1)*sizeof(char)); tmp[0]='('; genePa(1,n,ret,returnSize,tmp); return ret;}每增加一个都要重新判断.
卡特兰数 代表了一系列问题:Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为:h(n) = C(2n-2,n-1)/n,n=1,2,3,...(其中C(2n-2,n-1)表示2n-2个中取n-1个的组合数)
转:http://blog.csdn.net/hackbuteer1/article/details/7450250 介绍了很多题目
http://blog.csdn.net/yutianzuijin/article/details/13161721 有个很好的解决方法
0 0
- leetcode——backtracking[1] Generate Parentheses ,Catalan数——卡特兰数
- 从leetcode—Generate Parentheses看卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- 卡特兰数——Catalan数
- Catalan数—卡特兰数
- Generate Parentheses(卡特兰数)
- 卡特兰数——generate-parentheses 打印成对的括号
- [C++]LeetCode: 84 Generate Parentheses (卡特兰数)
- 卡特兰数(Catalan)
- 卡特兰数(Catalan)
- 卡特兰数catalan
- 算法竞赛入门经典:第八章 高效算法设计 8.9棋盘覆盖
- isis最短路径计算:如何添加一个顶点
- Android开发环境的搭载
- nmp 命令
- Android连接MS SQLServer 数据库2005-2014
- leetcode——backtracking[1] Generate Parentheses ,Catalan数——卡特兰数
- 算法竞赛入门经典:第八章 高效算法设计 8.12非线性方程求根
- 词向量的kmeans词聚类实现
- AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
- poj 1035 Spell checker 字符串,暴力
- MFC重绘窗口函数
- unity使用抽象工厂模式
- 25. PHP 文件处理
- Java 树父节点递归获取树子节点