算法-二叉树-折纸问题

2022-4-11 diaba 笔试题

package com.jiucaiyuan.net.algrithm.tree;

/**
 * <pre>
 * 【问题】折纸问题
 * 【题目】请把一张纸条竖着放在桌子上,然后把纸条从下面向上方对这一次,压出折痕后展开,
 * 此时折痕是凹下去的,即折痕凸起的方向指向纸条的背面;
 * 如果从纸条的下方向上连续的折2次,压出折痕后展开,此时有三条折痕,
 * 从上到下依次是下折痕、下折痕和上折痕;给定一个输入参数n,
 * 表示纸条都从下边向上连续对着n次,请从上到下打印所有折痕方向。
 * 例如:n=1时,打印:down;n=2时,打印:down down up
 *
 * 【思路】经过多次对折操作,画出折痕及方向,总结出来,类似于一个二叉树,所以是二叉树的中序遍历
 * </pre>
 *
 * @Author jiucaiyuan  2022/4/11 23:41
 * @mail services@jiucaiyuan.net
 */

public class PaperFolding {


    public static void printAllFold(int n) {
        printProcess(1, n, true);
    }

    /**
     * @param time   折次数
     * @param n      总共折几次
     * @param isDown 当前是凹么?
     */
    private static void printProcess(int time, int n, boolean isDown) {
        if (time > n) {
            return;
        }
        printProcess(time + 1, n, true);
        System.out.println(isDown ? "凹" : "凸");
        printProcess(time + 1, n, false);
    }

    public static void main(String[] args) {
        int times = 3;
        printAllFold(times);
    }

}

发表评论:

Powered by emlog 京ICP备15045175号-1 Copyright © 2022