cp了评论区点赞最多的大佬代码,贴一下

火车进站

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


import java.util.*;

public class Main {
    static List<String> output = new ArrayList<>();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();
        int[] numbers = new int[count];
        for (int i = 0; i < count; i++) {
            numbers[i] = in.nextInt();
        }
        Stack<Integer> stack = new Stack<>();
        String curOut = "";
        process(numbers, stack, 0, curOut);
        Collections.sort(output);
        for (int i = 0; i < output.size(); i++) {
            char[] charArray = output.get(i).toCharArray();
            for (int k = 0; k < charArray.length; k++) {
                if (k == charArray.length - 1) {
                    System.out.print(charArray[k]);
                } else {
                    System.out.print(charArray[k] + " ");
                }
            }
            System.out.println();
        }
    }

    /**
     * stack要么进,要么出。先进一个,处理完这个进的,然后恢复原样;再出,处理完这个出的,就完事了。
     * * @param numbers 编号数组 * @param stack 核心栈 * @param i 当前编号 * @param curOut 当前已经出栈的数字
     */
    public static void process(int[] numbers, Stack<Integer> stack, int i,
                               String curOut) {
        //如果出栈数字已经满了,就先添加
        if (curOut.length() == numbers.length) {
            output.add(curOut);
        }
        //如果出栈的数字没有满,此时可以出栈也可以进栈,都可以。
        // 这里先做出栈
        // 出栈需要建立在栈本身不为空的基础上
        if (!stack.isEmpty()) {
            //出栈
            int temp = stack.pop();
            //继续后面的动作,一条路走到黑
            // 出栈,该数组添加temp
            process(numbers, stack, i, curOut + temp);
            //这种出栈的场景走完后,下一个场景,进栈,不过先恢复原样
            stack.push(temp);
        }
        //开始做入栈场景
        // 入账时要确保还有数据入账
        if (i < numbers.length) {
            //入账
            int temp2 = numbers[i];
            stack.push(temp2);
            //继续后面的操作,一条路走到黑
            // i位置移动到下一个
            process(numbers, stack, i + 1, curOut);
            //这种场景走完后,恢复原样
            stack.pop();
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务