957. Prison Cells After N Days (python)

连续有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值大小都可以找到循环体,求余输出数组

你可能感兴趣的:(leetcode)