四對括號可以有多少種匹配排列方式?比如兩對括號可以有兩種:()()和(())


該題的公式版暫時還沒弄出來,感覺是應該可以按照排列組合弄出來的。下面給出程序版的

第一種思想:

把所有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)統計葉子節點的個數即是結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM