作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


题目地址:https://leetcode.com/problems/prison-cells-after-n-days/description/

题目描述

There are 8 prison cells in a row, and each cell is either occupied or vacant.

Each day, whether the cell is occupied or vacant changes according to the following rules:

  • If a cell has two adjacent neighbors that are both occupied or both vacant, then the cell becomes occupied.
  • Otherwise, it becomes vacant.

(Note that because the prison is a row, the first and the last cells in the row can’t have two adjacent neighbors.)

We describe the current state of the prison in the following way: cells[i] == 1 if the i-th cell is occupied, else cells[i] == 0.

Given the initial state of the prison, return the state of the prison after N days (and N such changes described above.)

Example 1:

Input: cells = [0,1,0,1,1,0,0,1], N = 7
Output: [0,0,1,1,0,0,0,0]
Explanation:
The following table summarizes the state of the prison on each day:
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

Example 2:

Input: cells = [1,0,0,1,0,0,1,0], N = 1000000000
Output: [0,0,1,1,1,1,1,0]

Note:

  1. cells.length == 8
  2. cells[i] is in {0, 1}
  3. 1 <= N <= 10^9

题目大意

有一个数组,每次操作:如果某个位置i的左边和右边的元素相等,那么当前位置改成1;否则就是0.求N次操作之后的结果是多少。

解题方法

周期是14

写了一个多小时的题目,后来才发现周期是14.

发现周期的过程就是尝试了一下,不同的数组的循环周期是多少。试了几个之后发现是14,那就是14了。

如果知道是14之后那就好办了,先把N mod 14,然后注意了!如果mod完之后等于0,应该把N设置为14!!最后我是有时间提交通过的,但是这个地方没有想明白,所以比赛结束之后才通过的。

底下的转移方程就很简单了,直接转移。因为最多操作14次,所以很容易就过了。

代码如下:

class Solution(object):
def prisonAfterNDays(self, oldcells, N):
"""
:type cells: List[int]
:type N: int
:rtype: List[int]
"""
cells = copy.deepcopy(oldcells)
count = 0
N %= 14
if N == 0:
N = 14
while count < N:
newCell = [0] * 8
for i in range(1, 7):
if cells[i - 1] == cells[i + 1]:
newCell[i] = 1
else:
newCell[i] = 0
cells = newCell
count += 1
return cells

日期

2018 年 12 月 16 日 —— 周赛好难

最新文章

  1. Sublime Text 3 Plugin Better!
  2. 怎样把windows中安装的程序列出来?
  3. 【转】对 Xcode 菜单选项的详细探索(干货)
  4. Guidelines for clock
  5. 10.24 noip模拟试题
  6. 安全控件开发原理分析 支付宝安全控件开发 C++
  7. AOP学习笔记一
  8. AngularJS学习笔记3
  9. LearnPython_week2
  10. 蒙层嵌套pdf以及连接后台
  11. 【20190221】HTTP-URI与URL
  12. postgre中类似oracle的sql%rowcount用法
  13. 详解centos7配置本地yum源的方法
  14. [APM] 解读APM技术分类和实现方式
  15. Java知多少(65)线程的挂起、恢复和终止
  16. jmeter压测之 监控--nmon
  17. 1--Selenium环境准备--Eclipse 添加Testng插件
  18. react-native 集成react-native-image-crop-picker,使用相册相机功能
  19. python被游标坑了
  20. CF1096G Lucky Tickets

热门文章

  1. Xwiki——实现
  2. typedef定义数组
  3. 日常Java 2021/11/9
  4. 并发 并行 进程 线程 协程 异步I/O python async
  5. acute, adapt
  6. day04 查找关键字
  7. Spark(二十)【SparkSQL将CSV导入Kudu】
  8. 【STM32】晶振,主时钟,外设频率介绍
  9. 容器之分类与各种测试(四)——map
  10. 单链表的模板类(C++)