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
注意到變換的總共只有8位數,且開頭結尾除了一開始可能為1以後必然為0,那麼必然在64次以內發生迴圈。直接暴力找出迴圈節即可。
class solution
for(int i = 1; ; i++) else
tmp <<= 1;
tmp += status[i][j];
}if(vis[tmp]) else
}vectorans;
cout << pos << " " << rd << endl;
if(n <= pos + rd - 1)
} else
}return ans;
}};// [1,1,0,1,1,0,1,1]
// 6
Leetcode 957 N天後的牢房
8 間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法有兩個相鄰的房間。我們用以下方式描述監...
LeetCode 957 N天後的牢房
題目描述 8 間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法有兩個相鄰的房間。我們用以下...
Leetcode 957 N天後的牢房
leetcode 957.n天後的牢房 8間牢房排成一排,每間牢房不是有人住就是空著。每天,無論牢房是被占用或空置,都會根據以下規則進行更改 如果一間牢房的兩個相鄰的房間都被占用或都是空的,那麼該牢房就會被占用。否則,它就會被空置。請注意,由於監獄中的牢房排成一行,所以行中的第乙個和最後乙個房間無法...