根據入棧順序輸出所有可能的出棧順序 (Java)
阿新 • • 發佈:2018-11-29
比如入棧順序是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); } } }
}