四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

该题的公式版暂时还没弄出来,感觉是应该可以按照排列组合弄出来的。下面给出程序版的

第一种思想:

把所有8位以内的二进制数循环一次,对于每一个二进制数的每一位,从高到低依次相加,其中遇到0的话加-1,遇到1加1,每次加的结果需要大于等于0

加完所有位的结果应该为0,满足两个条件的即是一种组合

第二种思想:

我们可以用生成二叉树的方法解决,重新定义一个数据结构,数据结构如下:

struct Node{

        int data;//0或1

        int num0;//0出现的次数

        int num1;//1出现的次数

        struct Node* lchild;

        struct Node* rchild;

};

同时我们需要用一个队列保存叶子节点的指针,目的是为了降低时间复杂度

步骤如下:

(1)用元素1生成根节点,同时num1++,num0=0,lchild=NULL,rchld=null;把该节点入队列

(2)从队列取队首元素,比较num1和num0的大小,当num1=4的时候节点不再增加;如果num1大于num0,则为该节点生成生成左右孩子,左孩子data=1,num0=父节点num0;num1=父节点num1+1;右孩子data=0,num0=父节点num0+1,num1=父节点num1;

如何num1=num0,只增加一个左孩子1,同时新增加的节点入队列

(3)重复步骤(2)知道队列为空

(4)统计叶子节点的个数即是结果

posted on   为梦飞翔  阅读(2802)  评论(2编辑  收藏  举报

编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· 软件产品开发中常见的10个问题及处理方法
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期
< 2012年5月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

导航

点击右上角即可分享
微信分享提示