1. 程式人生 > >根據入棧順序輸出所有可能的出棧順序 (Java)

根據入棧順序輸出所有可能的出棧順序 (Java)

比如入棧順序是1,2,3,那麼出棧順序分別可以是1,2,3;1,3,2;….

import java.util.Stack;
public class ss {

static char[] in={'a','b','c'};

public static void main(String[] args){
    fun(0,new Stack<Character>(),"");
}

static void fun(int n, Stack <Character> stk, String sout)
{   
    //System.out.println("當前進度"+n+"    "+"當前已出"+sout);

    if(n == in.length && stk.isEmpty()){//如果入棧完畢了,且也棧空了,就輸出此出棧順序          這個是遞迴的結束條件
        System.out.println(sout);
    }
    else//以上其中一項未完成
    {
        Stack<Character> s1=(Stack<Character>) stk.clone();
        Stack<Character> s2=(Stack<Character>) stk.clone();
        //選擇入棧
        if (n <  in.length)//如果是未全部入棧                       
        {
            s1.push(in[n]);//      繼續入棧
            fun(n+1, s1, sout+"");//執行下一個操作
        }
        //選擇出棧 
        if (!s2.isEmpty())//如果棧不空,並且,入棧元素不是最後一個
        {                                   //當到最後一個字元入棧之後,上面已經執行先出棧了
            String temp=sout+ s2.peek();//記錄出棧元素
            s2.pop();//出棧
            fun(n, s2, temp);
        }
    }
}

}