首先的前提是進棧一定是要按照順序進棧如1、2、3、4的順序,如果第乙個出的是4,那麼要依次先進棧1、2、3、4,
然後出棧,這樣的話第乙個是4,沒有其他的元素可以再進棧了,所以只能按順序出棧,這樣出棧的順序就是4、3、2、1。
假如出棧的順序是3、4、2、1,你就要先分析出3的情況,只有先將1、2、3入棧,然後將3出棧。然後進棧4,再出棧4、2、1.
再如果出棧的順序是3、2、4、1或3、2、1、4,先將1、2、3入棧,再出棧3、2,如果這個時候是前面的序列,就先進4,再出棧4、1,如果是後面的出棧順序就出1,然後再入棧4,再出棧4,這樣就會得到上面的序列了。
假如入棧順序為1234,給定乙個出棧序列,如2431,它是合法的。
因為對於出棧序列中的每乙個數字,在它後面的、比它小的所有數字,一定是按遞減順序排列的。
假如出棧序列為4123,顯然不滿足上述要求,因為對於4,它後面比它小的數字串行為123,遞加,所以不是合法出棧序列。
若出棧為3142,也不合法,因為3後面比它小的1和2不是遞減排列的。
若出棧為1234,則合法,因為對於每乙個數字,它後面沒有比它小的數字。
這種方法用來排除那些錯誤的出棧順序很有效。
棧問題 根據入棧序列,得出可能的出棧序列
根據入棧序列,得出可能的出棧序列 例如 輸入 a b 輸出 a進a出b進b出 ab a進b進b出a出 ba 輸入 a b c 輸出 a進a出b進b出c進c出 abc a進a出b進c進c出b出 acb a進b進c進c出b出a出 cba a進b進b出c進c出a出 bca a進b進b出a出c進c出 bac...
窮舉所有可能的出棧序列
輸入乙個入棧序列,輸出可能的出棧序列。輸入格式 第一行輸入乙個整數 n 表示入棧序列的長度。第二行輸入 n 個數字,表示入棧序列。輸出格式 輸出所有可能的出棧序列 輸入樣例 3 1 2 3輸出樣例 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1很容易看出來,本題目是一道遞迴題。可以通過窮...
出棧序列問題
棧之根本 後進先出 last in first out,lifo 要解決這類問題 最本質就是出棧的時候,可以邊入棧邊出棧。考慮 設棧的輸入序列是1,2,3則出棧的序列有?1,2,3 1入棧出棧,2入棧出棧,3入棧出棧 1,3,2 1入棧出棧,2入棧,3入棧出棧,2出棧 2,1,3 1入棧,2入棧出棧...