資料結構與演算法 進出棧方案數問題

2022-09-04 19:27:12 字數 555 閱讀 9285

讓n個數字依次進棧,求不同的出棧序列的種類個數。

首先可以對問題進行乙個轉化,脫去數字本身的特性,單純將出棧序列的序列看成是由進棧和出棧兩種操作來構成的序列,其中我們可以令1代表入棧,0代表出棧。

而當出棧序列是非法的時候,就是在說棧為空時,仍然進行出棧操作,換成01串進行理解,也就是說,在整個01串中,存在某乙個位置,且這個位置前面的操作0的個數大於1的個數,即說明這是非法的。

那麼,我們要求出所有可行的方案,我們可以換乙個角度。

合法方案數 = 總方案數 - 非法方案數

總方案數 = 給你2n個位置,先填入n個1,其他空餘位置補上0 = \(c_^\)

在計算非法方案數,我們可以稍微做一下轉換。

(注意這裡都是非法的,無論怎麼轉換的話)假設定在某個位置,這個位置前有p個1,p+1個0, 那麼在這個位置後有n-p個1,n-(p+1)個0,在這裡,我們可以稍微做乙個轉換,在這個位置後有n-p個"0",n-(p+1)個"1",所以此時2n個位置共有n+1個"0",n-1個"1"。

所以非法的方案數為\(c_^\)

所以合法的方案數 = \(c_^-c_^\)

資料結構與演算法《棧》

概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...

棧(資料結構與演算法)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...

資料結構與演算法 棧

後進先出 lifo last in first out 最後插入的元素最先出來,是一種 操作受限 的線性表,只允許在端插入和刪除資料 順序棧 用陣列實現,順序棧需要動態擴容,在初始化時需要給定乙個固定大小的陣列,當棧大於固定大小時需要擴充陣列的大小。templateclass myarraystac...