給定入棧序列1到n,輸出所有可能的出棧序列
阿新 • • 發佈:2019-02-13
package com.test; import java.util.Stack; public class StackSequence { public static int number=0; static Stack<Integer> stack=new Stack<Integer>();//儲存入棧的元素 static int[] array=new int[10];//儲存輸出的元素 /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub print_valid_sequence(1,4); } //入棧順序1到n,輸出所有的出棧序列 public static void print_valid_sequence(int i, int n ) { int top;//用來取top if(i == n+1)//遞迴結束條件,輸出序列 { ++number; System.out.println(number+"——————"); //輸出陣列中的元素 for(int j = 0;j < n-stack.size();++j) System.out.print(array[j]+"-");//正序輸出 //輸出棧中剩下的元素 for(int k=stack.size()-1;k>=0;k--) { System.out.print(stack.get(k)); } System.out.println(); } else { stack.push(i);//入棧 print_valid_sequence(i+1,n); stack.pop();//為保持stack不變,出棧 if(!stack.empty())//將棧頂元素輸出 { top=stack.peek(); array[i-stack.size()-1] = top;//將輸出的元素放入array中 stack.pop(); print_valid_sequence(i,n);//i不變 stack.push(top); } } } }
輸出:
1——————
4321
2——————
3-421
3——————
3-2-41
4——————
3-2-1-4
5——————
2-431
6——————
2-3-41
7——————
2-3-1-4
8——————
2-1-43
9——————
2-1-3-4
10——————
1-432
11——————
1-3-42
12——————
1-3-2-4
13——————
1-2-43
14——————
1-2-3-4