1. 程式人生 > >n個數的出棧方式(卡特蘭數)

n個數的出棧方式(卡特蘭數)

問題

給定n個數,有多少種出棧序列,進棧是按照順序進棧?

分析:當n為1時:
f(1) = 1 //即 1
當n為2時:
f(2) = 2;//12, 21
當n為3時:
f(3) = 5;//123,132,213,321,231
當n為4的時候:

  • 當a第一個出棧的時候,bcd的進棧與出棧的方式與n=3的時候是一樣的,是它的子問題,此時有f(3)種不同結果。
  • 當a第二個出棧的時候,a前有一個元素,並且只能是b,還剩cd最後兩個處理,此時不同的方法為f(1)*f(2)
  • 當a出現在第三個位置的時候,a前有兩個元素,只能是bc,還剩d最後處理,此時不同的方法為f(2)*f(1)
  • 當a出現在最後一個位置的時候,a前有三個元素,也是f(3)的子問題,此時有f(3)種不同的結果。
    總數為它們的值相加:f(3)+f(1)*f(2)+f(2)f(1)+f(3) = 14

推廣得:
這裡寫圖片描述