博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode——backtracking[1] Generate Parentheses ,Catalan数——卡特兰数
阅读量:4138 次
发布时间:2019-05-25

本文共 1715 字,大约阅读时间需要 5 分钟。

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 有个很好的解决方法

你可能感兴趣的文章
andorid 上下滑动状态判断和listview分页显示
查看>>
Android listview分页显示——data from php
查看>>
Android实现ListView异步加载图片
查看>>
wordpress用户权限
查看>>
wordpress用户角色和权限函数注解
查看>>
linux系统ioctl函数使用实例
查看>>
Linux文件遍历
查看>>
剖析Linux系统启动过程
查看>>
深入理解Linux启动过程
查看>>
Linux C语言错误处理
查看>>
浏览器返回结果解压
查看>>
Android中程序与Service交互的方式——综述
查看>>
Android中程序与Service交互的方式——交互方式
查看>>
Linux Examples: dm-crypt
查看>>
encrypted filesystemsdmsetup losetup and mount
查看>>
How to mount encrypted linux disk/diskIMGfile
查看>>
linux mount an encrypted disk/diskimgfile
查看>>
losetup -K
查看>>
Booting with the Initial Ramdisk---linuxrc
查看>>
linux initrd与linuxrc
查看>>