题解 | #火车进站#

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

import java.util.*;
//bfs
public class Main{
    static Set<String> result = new HashSet<>();
    static int[] id;
    static ArrayDeque<ifBranch>  queue = new ArrayDeque<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        id = new int[n];
        for (int i = 0; i < n; i++) {
            id[i] = sc.nextInt();
        }
        ifBranch start = new ifBranch(0, new Stack<>(), new ArrayList<>());
        queue.add(start);
        bfs(start);
        result.stream().sorted(String.CASE_INSENSITIVE_ORDER).forEach(System.out::println);



    }
    public static void bfs(ifBranch branch){
        if(branch.index == id.length){
            while (branch.integers.size()>0){
                branch.res.add(branch.integers.pop());
            }


            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < branch.res.size(); i++) {
                if(i != branch.res.size()-1){
                    sb.append(branch.res.get(i)).append(" ");
                }
                else {
                    sb.append(branch.res.get(i));
                }
            }
            result.add(sb.toString());

        }
        if (branch.index< id.length) {
            try{
                ifBranch ifPop = new ifBranch(branch.index);
                ifPop.integers = new Stack<>();
                ifPop.res = new ArrayList<>();
                ifPop.integers.addAll(branch.integers);
                ifPop.res.addAll(branch.res);

                Integer pop = ifPop.integers.pop();
                ifPop.res.add(pop);
                queue.add(ifPop);
            }catch (Exception e){}
            ifBranch ifPush = new ifBranch(branch.index+1);
            ifPush.integers = new Stack<>();
            ifPush.res = new ArrayList<>();
            ifPush.integers.addAll(branch.integers);
            ifPush.res.addAll(branch.res);
            ifPush.integers.push(id[branch.index]);
            queue.add(ifPush);
        }
        queue.remove(branch);
        if(queue.size()>0){
            bfs(queue.element());
        }
    }
    static class ifBranch{
        int index;
        Stack<Integer> integers;
        List<Integer> res;

        public ifBranch(int index, Stack<Integer> integers, List<Integer> res) {
            this.index = index;
            this.integers = integers;
            this.res = res;
        }

        public ifBranch(int index) {
            this.index = index;
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务