您的位置:首页 > 其它

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

2015-06-22 16:57 483 查看
来源: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<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: