给定入栈序列1到n,输出所有可能的出栈序列

来源:http://www.oschina.net/code/snippet_782608_15128


package com.test;

import java.util.Stack;

public class StackSequence {

	public static int number=0;
	 static Stack stack=new Stack();//保存入栈的元素
     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



你可能感兴趣的:(算法)