1. 程式人生 > >關於N個數1--N數順序入棧,有多少種出棧方式的問題

關於N個數1--N數順序入棧,有多少種出棧方式的問題

這是一個排列組合的問題,赫赫有名的卡特蘭數

舉例說明,共有一個1,2,3,4四個數,入棧方式有
1入,2入,3入,4入,4出,3出,2出,1出 故出棧順序4,3,2,1
1入,1出,2入,3入,4入,4出,3出,2出 故出棧順序1,4,3,2
1入,1出,2入,2出,3入,4入,4出,3出 故出棧順序1,2,4,3
1入,1出,2入,2出,3入,3出,4入,4出 故出棧順序1,2,3,4
1入,2入,2出,3入,4入,4出,3出,1出 故出棧順序2,4,3,1
... ...

實際上解決此問題可以這樣做:假設n個元素的出棧有 H(n)種方式,對於n>=2

假設索引為i個元素第一個出棧,那麼後面的出棧方式分為兩塊,一個是 1-- i-1的出棧方式,其有H(i-1),另外是i+1至n的出棧方式,共有H(n-i):
故其對於元素索引為i的元素第一個出棧共有H(i-1)*H(N-i)種出棧方式
那麼
H(N) = H(1-1)*H(N-1)+(2-1)*(N-2)+....+H(N-1)*H(1-1)取H(0)=1,H(1)=1,這是一個標準的求取卡特蘭數問題

C語言程式碼實現為一下:遞迴實現
int catlin(int N)
{
                 if (0 == N || 1 == N) return 1;
                 int sum = 0;
                 for (int i = 0; i < N; i++)
                                sum += catlin(i)*catlin( N - i - 1);
                 return sum;
}

對應的排列組合為C(2n,n) - C(2n,n+1)
--------------------- 
作者:漫遊者1號 
來源:CSDN 
原文:https://blog.csdn.net/dourenyin/article/details/40483471 
版權宣告:本文為博主原創文章,轉載請附上博文連結!