LeetCode 957 N天後的牢房

2021-09-26 11:11:16 字數 1273 閱讀 4856

題目描述:

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

詳解:

剛看到這道題第一反應就是恩,挺簡單的。但是當測試用例2下1000000000天後,如果按照這樣天數一天一天向後遍歷的話,時間複雜度就及其大,所以沒偷懶就手動多畫了幾遍,發現,它存在這樣的規律:14天乙個迴圈,也就是在第15天改變後它的結果和第1天的一樣。那基於這樣的規律下,寫如下**:(其實真的不難)

class solution 

}cells = res;

} return res;}};

執行結果如下:

Leetcode 957 N天後的牢房

8 間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法有兩個相鄰的房間。我們用以下方式描述監...

Leetcode 957 N天後的牢房

leetcode 957.n天後的牢房 8間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法...

Leetcode 957 N 天後的牢房(暴力)

8 間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法有兩個相鄰的房間。我們用以下方式描述監...