สมมติว่าเรามีเมทริกซ์ไบนารีโดยที่ 0 แสดงเซลล์ว่างและ 1 แสดงบล็อกที่สร้างรูปร่าง ตอนนี้เราต้องหาปริมณฑลของรูปร่าง รูปร่างจะไม่เป็นรูใด ๆ อยู่ข้างใน
ดังนั้นหากอินพุตเป็นแบบ
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
แล้วผลลัพธ์จะเป็น 14
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ง :=0
-
ปริมณฑล :=0
-
ความสูง :=จำนวนแถวของเมทริกซ์
-
ความยาว :=จำนวนคอลัมน์ของเมทริกซ์
-
สำหรับแต่ละแถวในเมทริกซ์ ทำ
-
ค :=0
-
ในแต่ละแถวให้ทำ
-
ถ้า val เท่ากับ 1 แล้ว
-
เซอร์ราวด์ :=4
-
ถ้า c ไม่เหมือนกับความยาว - 1 แล้ว
-
ถ้าเมทริกซ์[d, c + 1] เหมือนกับ 1 แล้ว
-
เซอร์ราวด์ :=เซอร์ราวด์ - 1
-
-
-
ถ้า c ไม่เหมือนกับ 0 แล้ว
-
ถ้าเมทริกซ์[d, c - 1] เหมือนกับ 1 แล้ว
-
เซอร์ราวด์ :=เซอร์ราวด์ - 1
-
-
-
ถ้า d ไม่เท่ากับความสูง - 1 แล้ว
-
ถ้าเมทริกซ์[d + 1, c] เท่ากับ 1 แล้ว
-
เซอร์ราวด์ :=เซอร์ราวด์ - 1
-
-
-
ถ้า d ไม่เหมือนกับ 0 แล้ว
-
ถ้าเมทริกซ์[d - 1, c] เหมือนกับ 1 แล้ว
-
เซอร์ราวด์ :=เซอร์ราวด์ - 1
-
-
-
ปริมณฑล :=เส้นรอบรูป + รอบทิศทาง
-
ค :=ค + 1
-
-
-
d :=d + 1
-
-
กลับปริมณฑล
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, matrix): d = 0 perimeter = 0 height = len(matrix) length = len(matrix[0]) for line in matrix: c = 0 for val in line: if val == 1: surround = 4 if c != length - 1: if matrix[d][c + 1] == 1: surround -= 1 if c != 0: if matrix[d][c - 1] == 1: surround -= 1 if d != height - 1: if matrix[d + 1][c] == 1: surround -= 1 if d != 0: if matrix[d - 1][c] == 1: surround -= 1 perimeter += surround c += 1 d += 1 return perimeter ob = Solution() matrix = [ [0,0,0,0,0], [0,0,1,1,1], [0,0,1,1,0], [0,1,1,1,0], [0,0,0,0,0] ] print(ob.solve(matrix))
อินพุต
matrix = [ [0,0,0,0,0], [0,0,1,1,1], [0,0,1,1,0], [0,1,1,1,0], [0,0,0,0,0]]
ผลลัพธ์
14