以乙個序列(不重複)入棧可能的出棧順序可以通過計算對於的卡特蘭數獲得。
另一種形式是
感興趣的話可以去組合數學裡看推導過程,在此就不討論其證明過程
當我們模擬入棧 出棧是會發現,以乙個序列入棧的除第乙個元素必須入棧外,其他時候面臨著出棧棧頂元素或將當前序列數入棧兩種情況
簡化為遞迴過程就是
if(輸入序列為空,即「入棧結束」)//遞迴邊界
else//也就是上面所說的兩種選擇
//以下是**
#include#include#include#include#include#include#include#includeusing namespace std;
int num = 0;
void findall(queuein,stacks,queueout)
由入棧 出棧序列求所有出棧 入棧序列
給出乙個陣列,代表入棧順序,求所有出棧可能性?給出乙個陣列,代表出棧順序,求所有入棧可能性?這兩題解法相同,可利用全排列求出所有組合,再進行可能性分析。全排列 如下 public list permute int nums 這種方法是什麼意思呢?例如abc,在第0位有三種可能,axx,bxx,cxx...
給定入棧順序,輸出所有可能出棧情況及所有情況的總數
乙個長度為n的無重複序列入棧的所有出棧方式 例如1 2 3這三個數字,入棧並出棧共有5種方式,分別為 321 312 231 213 123。那麼對於長度為n的無重複序列中所有的出棧方式有哪些呢?為了設計計算的演算法,我們可以用佇列 queue 來模擬輸入,佇列的輸出則按照原先序列的順序。使用乙個棧...
窮舉所有可能的出棧序列
輸入乙個入棧序列,輸出可能的出棧序列。輸入格式 第一行輸入乙個整數 n 表示入棧序列的長度。第二行輸入 n 個數字,表示入棧序列。輸出格式 輸出所有可能的出棧序列 輸入樣例 3 1 2 3輸出樣例 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1很容易看出來,本題目是一道遞迴題。可以通過窮...