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

示例 1:
输入:cells = [0,1,0,1,1,0,0,1], N = 7
输出:[0,0,1,1,0,0,0,0]
解释:
下表概述了监狱每天的状况:
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]

示例 2:
输入:cells = [1,0,0,1,0,0,1,0], N = 1000000000
输出:[0,0,1,1,1,1,1,0]

提示:
cells.length == 8
cells[i] 的值为 0 或 1
1 <= N <= 10^9

方法1:
主要思路:解题链接汇总
(1)模拟+哈希;
(2)直接模拟题目中的变化过程;
(3)在变化的次数很多时,可能出现循环的变化状态,使用哈希存储出现过的中间状态,处理变化次数过多时出现超时的情形;

class Solution {public:vector<int> prisonAfterNDays(vector<int>& cells, int n) {//存储中间出现过的状态vector<string> strs;unordered_map<string,int> mp;string cur_str;for(int&i:cells){//使用转变为字符串来哈希cur_str+=i+'0';}while(n--){string str(8,'0');for(int i=1;i<7;++i) {//此次变换if((cur_str[i-1]=='1'&&cur_str[i+1]=='1')||(cur_str[i-1]=='0'&&cur_str[i+1]=='0')){str[i]='1';}}swap(cur_str,str);//是否出现循环状态if(mp.count(cur_str)){int index=mp[cur_str];int nums=strs.size()-index;index+=n%nums;cur_str=strs[index];break;}//存储中间状态mp[cur_str]=strs.size();strs.push_back(cur_str);}for(int i=0;i<cur_str.size();++i){cells[i]=cur_str[i]-'0';}return cells;}
};

957 N 天后的牢房相关推荐

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

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

  2. Leetcode 957.N天后的牢房

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

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

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

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

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

  5. 957. N 天后的牢房

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

  6. 957.N天后的牢房

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

  7. Leetcode 957. N 天后的牢房

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

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

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

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

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

最新文章

  1. permute、transpose、view、reshape、unsequeeze与flatten
  2. POJ3666序列最小差值
  3. 《C程序设计语言》笔记 (五) 指针与数组
  4. 3-20Pytorch与张量裁剪运算
  5. 第二阶段冲刺第六天,6月5日。
  6. Android页面传值b,android数据传递(一)之activityA传递到activityB
  7. 计算机硬件 中级证,计算机硬件组装与教学方法计算机应用中级职称论文
  8. 判断数组中的元素是否连续
  9. 2019五一建模A题思路
  10. 微服务架构设计模式 pdf_分享一份美团T9大牛总结的神仙微服务架构设计模式PDF...
  11. matlab怎么创建数组对象,数组 – matlab初始化对象数组
  12. 【转摘】芯片的本质是什么
  13. 电子商务类网站CDN加速方案
  14. 什么是建站程序,建站程序有哪些?
  15. 永磁体磁偏角测试原理和测量设备介绍
  16. coco数据集分割可视化格式转换
  17. Android--- Drawer and Tab Navigation with ViewPager
  18. java resultset 获取列名_ResultSet 动态获取列名 | 学步园
  19. 网易云音乐数仓建设之路
  20. 质数乘积 -LintCode

热门文章

  1. 原生JS实现特效导航条
  2. beta阶段事后诸葛亮会议
  3. 下一个IPO目标?!美国MSP产业2020六大趋势
  4. android 横屏单机游戏,斗地主单机横屏版
  5. 端游吃鸡测试服服务器维护,《绝地求生大逃杀》PC版今日服务器更新维护 上线测试服内容!...
  6. c语言(a1 a2),A1A2客货车科目二考试场实拍!考试流程讲解
  7. 公司注册后未注销需要交罚款吗?
  8. pat basic 1104 天长地久
  9. Fiddler入门:下载、安装、配置、抓包、customize rules
  10. windows下将文件压缩成.tar.gz格式