Leetcode 957.N天后的牢房

8间牢房排成一排,每间牢房不是有人住就是空着。
每天,无论牢房是被占用或空置,都会根据以下规则进行更改:
如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。
否则,它就会被空置。
(请注意,由于监狱中的牢房排成一行,所以行中的第一个和最后一个房间无法有两个相邻的房间。)
我们用以下方式描述监狱的当前状态:如果第 i 间牢房被占用,则 cell[i]==1,否则 cell[i]==0。
根据监狱的初始状态,在 N 天后返回监狱的状况(和上述 N 种变化)。

输入:

cells = [1,0,0,1,0,0,1,0], N = 1000000000

输出:

[0,0,1,1,1,1,1,0]

思路

总共有八间牢房,只有空或非空两种状态,共2^8 = 256状态
N则有1e9,显然存在相同的状态,那么只要找到循环节就可以了。

题目链接

class Solution
{
public:int hashTable1[300]; //记录这个状态是否出现过int hashTable2[300]; //记录这个状态出现在第几天vector<int> prisonAfterNDays(vector<int>& cells, int N){int id = 0;for(int i=0; i<cells.size(); i++){if(cells[i])id += (1<<i);}hashTable1[id]=1;hashTable2[id]=0;int i=0,flag = 0;while(N--){vector<int>temp;id = 0;for(int j=0; j<cells.size(); j++){if(j==0||j==cells.size()-1)temp.push_back(0);else{if(cells[j-1]==cells[j+1]){temp.push_back(1);id += (1<<j);}elsetemp.push_back(0);}}cells = temp;if(flag)continue;if(flag==0&&hashTable1[id])  ///找到出现过的点{flag = 1;int repetend = i+1 - hashTable2[id];N%=repetend; ///去除循环}hashTable1[id]=1;hashTable2[id]=i+1;i++;}return cells;}
};

转载于:https://www.cnblogs.com/xcantaloupe/p/10152287.html

Leetcode 957.N天后的牢房相关推荐

  1. LeetCode 957. N 天后的牢房--储存循环节

    N 天后的牢房 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则 ...

  2. LeetCode 957. N 天后的牢房(查找循环节)

    1. 题目 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它 ...

  3. Leetcode 957. N 天后的牢房

    8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它就会被空置. ...

  4. Leetcode 957. N 天后的牢房 循环节

    题目: 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它就会 ...

  5. 【LeetCode】957. N 天后的牢房

    文章目录 题目:957. N 天后的牢房 解题思路 代码 题目:957. N 天后的牢房 957. N 天后的牢房 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会 ...

  6. 【LeetCode】957.N天后的牢房

    题目描述: 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它 ...

  7. 957. N 天后的牢房

    8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它就会被空置. ...

  8. 957 N 天后的牢房

    题目描述: 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它 ...

  9. 957.N天后的牢房

    8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它就会被空置. ...

最新文章

  1. leetCode第五题-求字符串最长回文字符串
  2. 会员制的cd出租销售java_模式|酒店改造养老会员制盈利模式及交易结构深度探讨...
  3. 使用anconada 的conda更换环境
  4. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
  5. tomcat是否有必要配置环境变量(摘)
  6. python 中的面向对象
  7. react学习预备知识_在10分钟内学习React基础知识
  8. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)
  9. 模板设计模式_C常用设计模式——模板方法模式
  10. ExtJs - grid 合并单元格 跨行跨列
  11. SQL 常用语句大全
  12. Python开发【第十九篇】:Python操作MySQL
  13. Jmeter安装及简单使用
  14. php红包互助源码_完整的微信红包接口API实现(php版)
  15. 新颖的自我介绍_有关最新颖的自我介绍
  16. Opencv C++成长之路(七):RGB转换灰度图像
  17. java web 图片上传
  18. java读取excel大文件
  19. Python 实现远程服务器(ssh)批量执行命令
  20. 手机访问电脑文件_彻底解决手机-电脑互传大文件的难题 电脑-手机快捷互联互通...

热门文章

  1. iPhone屏幕投射到Mac的解决方案
  2. [工具] alx 和 jad 文件生成器 BerryCreate 2.0 分享
  3. VMware虚拟机配置
  4. 怎么实现将word中的公式导入(或粘贴)到网页编辑中
  5. 传奇客户度文件代码完全解析
  6. Android崩溃日志框架,崩溃日志上传框架 LogReport
  7. ac990网络版会计核算软件(带狗)
  8. 五子棋规则之先后手的确定方法
  9. 通过“控制面板”无法卸载 Office 2003、Office 2007 或 Office 2010 套件时如何才能将其卸载?
  10. 华为HCIA备考(数通) 易错题整理 PART1