文档章节

折纸问题

圣洁之子
 圣洁之子
发布于 2017/07/31 11:44
字数 406
阅读 6
收藏 0

题目描述

请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。

给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".

测试样例:

1
返回:["down"]

题目来源

链接

解题思路

首先我用手头的纸张进行实验,进行对折1,2,3,4次,发现了一些规律。

  • N次折纸所得的折痕为 2的N次方 +(2的N次方 - 1)。
  • N次折纸与 N -1 次折纸有明显的继承关系。新增的折痕以先“down”后"up"的方式对前一次的折痕进行补充。

解决方案

package codewars.jul;

import java.util.LinkedList;

public class FoldPaper {

	private static String[] next(String[] previous, int fold) {
		int n = (int) Math.pow(2, fold);
		String[] rs = new String[n + (n - 1)];
		int cur = 0;
		boolean down = true;
		for (int i = 0; i < rs.length; i++) {
			if (i % 2 == 1) {
				rs[i] = previous[cur++];
			}
		}
		for (int i = 0; i < rs.length; i++) {
			if (rs[i] == null) {
				if (down) {
					rs[i] = "down";
					down = false;
				} else {
					rs[i] = "up";
					down = true;
				}
			}

		}

		return rs;
	}

	public String[] foldPaper(int n) {
		if (n < 1) {
			return new String[0];
		}
		LinkedList<String> list = new LinkedList<String>();
		int pieces = 0;
		int count = 0;
		if (n == 1) {
			list.add("down");
			pieces = 2;
			count = 1;
			return list.toArray(new String[0]);
		} else {
			return next(foldPaper(n - 1), n - 1);

		}

	}

	public static void main(String[] args) {
		FoldPaper obj = new FoldPaper();
		String[] arr = obj.foldPaper(4);
		for (String str : arr) {
			System.out.print(str + " ");
		}
	}
}

© 著作权归作者所有

上一篇: 链表的回文结构
下一篇: 顺时针打印矩阵
圣洁之子
粉丝 10
博文 398
码字总数 123464
作品 0
深圳
后端工程师
私信 提问
4篇Nature同时揭示DNA自组装技术,离人造生命又近了一步

来源:刘盼科学网博客 概要: 科学家一直渴望利用自组装来构建人造物体,以达到细胞或细胞器的尺寸和复杂性,以便为研究,工程和医学应用构建合成的细胞机器。 iNature:自组装过程以各种形式...

cf2suds8x8f0v
2017/12/09
0
0
Ubuntu 18.04 默认壁纸已提供下载:还是熟悉的味道

Ubuntu 18.04 “全新炫酷”的默认壁纸已正式公布,并已提供下载。到 2018 年 4 月 26 日,新的默认壁纸将会随着 Ubuntu 18.04 LTS 的发布而出现在数千万个桌面。 新的默认壁纸长这样 ↓ 可以...

局长
2018/03/23
5.8K
16
分享6大主流视图切换(View Transition)

1.不可思议的上下滑动AndroidSlidingUpPanel 源码:http://www.itlanbao.com/code/20150815/10000/100388.html 2.DragLayout高仿QQ侧滑效果 源码:http://www.itlanbao.com/code/20150815/1......

梦想_在追逐
2015/09/21
73
0
配备可折叠机械臂的无人机可在狭窄空间轻松拾起物体

  据外媒The Verge报道。 为了使无人机更加实用,科学家们创造了一种可折叠的机械臂,允许无人机在狭窄的沟渠内拾取物体。 周三在《科学机器人》杂志上发表的一篇研究报告中描述了这种机械...

中国机器人
2018/03/15
0
0
这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识

据了解,8岁以上的孩子通常需要30分钟组装一台Kamigami机器人。 Dash Robotics公司的折纸机器人系列Kamigami广受欢迎,其以工具包的形式为各年龄层的孩子们提供更多关于STEM、编程及机器人等...

行者武松
2018/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部