给定入栈序列1到n,输出所有可能的出栈序列
2015-06-22 16:57
483 查看
来源:http://www.oschina.net/code/snippet_782608_15128
输出:
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
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
相关文章推荐
- Android Scroller类的详细分析
- android配置
- JavaMail实现收发邮件——(一)相关概念概述
- jquert结合原生javascript实现的checkbox全选与全不选
- Android 项目中文件夹的作用(初识)
- android中string.xml中%1$s、%1$d等的用法
- 如何Enable FireFox里的Java Plugin
- 场景调研
- Yii restfull添加新的ACTION方法
- Chrome与Firefox对于时间处理的不同
- poj 1731 Orders
- 从线性回归谈到岭回归lasso回归再到结构风险最小化和参数缩减
- Liunx_4.4_有名管道
- cocos2dx项目打包APK环境安装
- 探索MySQL高可用架构之MHA(3)
- [BZOJ1715][Usaco2006 Dec]Wormholes 虫洞
- Java, just a language (三)
- #16 3Sum Closest
- 吴晓波最劲爆演讲:终于把传统行业的转型升级都讲清楚了
- 《你的灯还亮着吗》3