来源:http://www.oschina.net/code/snippet_782608_15128
package com.test;
import java.util.Stack;
public class StackSequence {
public static int number=0;
static Stackstack=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