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