สมมติว่าเรามีเมทริกซ์ไบนารี 2D โดยที่ 1 หมายถึงเซลล์ที่มีชีวิตและ 0 หมายถึงเซลล์ที่ตายแล้ว เพื่อนบ้านของเซลล์คือเซลล์แนวนอน แนวตั้ง และแนวทแยงในทันที เราต้องหาสถานะถัดไปของเมทริกซ์โดยใช้กฎเหล่านี้
-
เซลล์ที่มีชีวิตที่มีเพื่อนบ้านที่อาศัยอยู่สองหรือสามคนอาศัยอยู่
-
เซลล์ที่ตายแล้วที่มีเพื่อนบ้านที่ยังมีชีวิตอยู่สามคนจะกลายเป็นเซลล์ที่มีชีวิต
-
เซลล์อื่นๆ ตายหมด
ดังนั้นหากอินพุตเป็นแบบ
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 0 | 1 |
แล้วผลลัพธ์ที่ได้จะเป็น
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
n :=ขนาดแถวของเมทริกซ์ m :=ขนาดคอลัมน์ของเมทริกซ์
-
res :=เมทริกซ์ขนาด n x m และเติมด้วย 0
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
สำหรับ j ในช่วง 0 ถึง m ให้ทำ
-
s :=0
-
ถ้า matrix[i, j] เท่ากับ 0 แล้ว
-
สำหรับ k ในช่วง i - 1 ถึง i + 1 ทำ
-
หรือ h ในช่วง j - 1 ถึง j + 1 ทำ
-
ถ้า 0 <=k
-
s :=s + matrix[k, h]
-
-
-
-
res[i, j] :=[0, 1, true เมื่อ s เหมือนกับ 3]
-
-
มิฉะนั้น
-
สำหรับ k ในช่วง i - 1 ถึง i + 1 ทำ
-
สำหรับ h ในช่วง j - 1 ถึง j + 1 ทำ
-
ถ้า 0 <=k
-
s :=s + matrix[k, h]
-
-
-
-
ถ้า s เป็น 3 หรือ 4 แล้ว
-
res[i, j] :=1
-
-
-
-
-
ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ตัวอย่าง
class Solution: def solve(self, matrix): n, m = len(matrix), len(matrix[0]) res = [[0 for j in range(m)] for i in range(n)] for i in range(n): for j in range(m): s = 0 if matrix[i][j] == 0: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] res[i][j] = [0, 1][s == 3] else: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] if s in [3, 4]: res[i][j] = 1 return res ob = Solution() matrix = [ [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ] print(ob.solve(matrix))
อินพุต
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ]
ผลลัพธ์
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]]