给定入栈顺序,求所有可能的出栈顺序(JAVA实现)

本文介绍了一个Java程序,该程序通过递归方法,根据给定的入栈序列来找出所有可能的出栈序列。核心思路在于,对于当前状态,栈可以选择继续接收新的元素入栈或让现有元素出栈。
import java.util.Scanner;

//给定入栈顺序,求所有出栈顺序
public class OutputStack {
//	思路:每个时刻,当前栈都有两种选择,继续入栈,或者出栈。因此,用递归就可以实现了。
	static void all_order(String in,String stack,String out)
    {
		//字符为空且栈为空,输出字符
        if(in.equals("")&&stack.equals(""))
            System.out.println(out);
        //如果字符未全部入栈,入栈
        if(!in.equals(""))
//        	模拟入栈的话,假设第一个入栈了,那么剩余输入字符就是(1,in.length()),栈里面就是stack+in.charAt(0)
            all_order(in.substring(1,in.length()),stack+in.charAt(0),out);
        //如果栈不空,选择出栈
        if(!stack.equals(""))
//        	模拟出栈的话,输入不变,栈里面就是(0,stack.length()-1),输出字符就是out加栈中最后一个字符
            all_order(in,stack.substring(0,stack.length()-1),out+stack.charAt(stack.length()-1));
    }
    public static void main(String[] args) {
    	Scanner input = new Scanner(System.in);
		String a=input.nextLine();
        all_order(a,"","");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值