栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

折纸问题.

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

折纸问题.

1. 描述

请把一张纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕展开,此时折痕是凹下去的,即折痕突起的方向指向纸条的背面,如果从纸条的下边向上方连续对拆次,压出的折痕后展开 此时有三条折痕,从上到下依次是下折痕,下折痕和上折痕 。给定一个输入参数N 代表纸条都从下边向上方连续对折N次 请从上到下打印所有折痕的方向
示例 1
输入1
输了
[“down”]
示例2
输入2
输入出
[“down”,”down”,”up”]

2. 思路

一开始看的时候,觉得应该是找规律。。
后面枚举了几轮之后,发现有点接近“树“的数据结构
本题解正是循着这种思路做的

3. 题解 3.2 树节点(这和传统的树有一丢丢差别)
public class Node {
    Node right;
    Node parent;
    String value;
    public Node(String value){
        this.value = value;
    }
}
3.2 树的构建+遍历
import java.util.*;



public class ZheZhi {

    static int n;
    static Node starter;
    static List ans = new ArrayList<>();

    final static String DOWN = "down";
    final static String UP = "up";

    
    static void init(){
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        scanner.close();
    }

    static void zheZhi(){
        //队列记录新产生的折痕节点
        LinkedList adds = new LinkedList<>();
        //折纸的次数
        for(int i=1;i<=n;i++){
             if(i==1){
                 Node root = new Node(DOWN);
                 starter = root;
                 adds.offer(root);
                 continue;
             }

             //每次遍历一层,可以确定一次最左侧的节点
             starter = null;

             int size = adds.size();

             while(true){

                if(size-- <= 0){
                    break;
                }

                Node node = adds.pollFirst();
                if(node == null){
                    break;
                }

                Node left = new Node(DOWN);
                Node right = new Node(UP);

                left.parent = node;
                node.right = right;

                adds.offerLast(left);
                adds.offerLast(right);

                 //控制最左侧节点
                if(starter == null){
                    starter = left;
                }
             }
        }
    }

    static void out(Node node){
        ans.add(node.value);
        if(node.parent != null && node.right == null){
            out(node.parent);
        }
        else if(node.parent != null && node.right != null){
            out(node.right);
            out(node.parent);
        }
        else if(node.parent == null && node.right != null){
            out(node.right);
        }
    }

    public static void main(String[] args) {
        init();
        zheZhi();
        out(starter);
        System.out.println(ans);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号