连续有8个牢房,每个牢房都被占用或空着。
每天,牢房是被占用还是空置都根据以下规则进行更改:
如果一个单元有两个相邻的邻居都被占用或都空着,则该单元将被占用。
否则,它将变为空置。
(请注意,因为监狱是一排,所以该行中的第一个和最后一个单元不能有两个相邻的邻居。)
我们通过以下方式描述监狱的当前状态: cells[i] == 1如果第- i个牢房被占用,否则cells[i] == 0。
给定监狱的初始状态,N几天后返回监狱状态(以及N上述更改)。
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:
cells.length == 8
cells[i] is in {0, 1}
1 <= N <= 10^9
python3:
class Solution:
def prisonAfterNDays(self,cells, N):
ls_all=[]
while N:
temp_arr=[0]
#print(step_num)
for i in range(len(cells)-2):
if cells[i]==cells[i+2]:
temp_arr.append(1)
else:
temp_arr.append(0)
temp_arr.append(0)
if temp_arr in ls_all:
print(temp_arr)
break
else:
ls_all.append(temp_arr)
N-=1
print(temp_arr,N)
cells=temp_arr
return ls_all[N %len(ls_all)-1]
tips:
1.无论N值大小都可以找到循环体,求余输出数组