折纸问题(规律题)(map的使用)
来源:互联网 发布:淘宝怎么找工厂做衣服 编辑:程序博客网 时间:2024/04/28 13:53
题目描述
请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。
给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".
测试样例:
1
返回:["down"]
题意分析:
拿一张纸,正对着自己,从下往上折,如果折痕正对着自己,则是up;否则是down。
假设 down 为 0, up 为 1。
通过观察上面的四组数据可以发现
1.在上次折叠的结果是这一个结果的起始。
2.以中间的元素为界把左右两边的元素分开,
以第三组结果为例:
左边为 0 0 1
右边为 0 1 1
左边元素取反:1 1 0
再上一步的基础上求逆序:0 1 1
可以发现结果就是右边的元素
所以 右边的元素 = 左边的元素各位取反,然后再逆序的结果
3.中间的元素:随着折痕的增多,左边元素和右边元素的个数永远相等,中间的元素永远是折纸次数为1的时候的结果(即为0)。
综上所述:对于输入的n次,逐次对上一次的结果进行保留,然后再对当前的列表中的元素进行取反然后再获得逆序,得到右边的元素,再原始结果的基础上中间加0,然后再加上之前所得到的右边的元素即可。
# -*- coding:utf-8 -*-class FoldPaper: def foldPaper(self, n): # write code here res = [] for i in range(n): # print res back = list(map(lambda x: not x, res[::-1])) res += [False] res += back def IsBoolString(flag): return "up" if flag else "down" return list(map(IsBoolString, res))if __name__ == "__main__":a = FoldPaper()print a.foldPaper(3)
0 0
- 折纸问题(规律题)(map的使用)
- [编程题]折纸问题
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题 。。。
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题
- 【拓扑题】神奇的折纸
- 【刷题之路】折纸条问题
- 关于折纸问题
- 折纸问题(Java)
- 折纸问题 C++实现
- 编程 折纸问题
- 其他题目---折纸问题
- 教女朋友学Python(4)——算
- 寒假学习之stm32(11)----usmart的调试
- 异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项。
- POJ 2506 Tiling (大数+递推)
- 文章标题
- 折纸问题(规律题)(map的使用)
- 算法提高 最长字符序列
- Python常用内置函数总结
- Github的简明教程
- GB2312简体中文编码表
- HDU 5306 Gorgeous Sequence 线段树
- javascript笔记--(第十三章)基本包装类型
- 花20分钟写的-大白话讲解如何给github上项目贡献代码
- 多维树状数组