@@ -71,38 +71,35 @@ And this graph has only one **connected components** (island).
7171``` python
7272class Solution :
7373 def __init__ (self ):
74- self .perimeter = 0
7574 self .grid = None
7675
7776 def islandPerimeter (self , grid : List[List[int ]]) -> int :
7877 self .grid = grid
78+ perimeter = 0
7979
80- for i, row in enumerate (self .grid):
81- for j, value in enumerate (row):
82- if value == 1 :
83- self .perimeter += self .water_edges(i, j)
84-
85- return self .perimeter
86-
87- def water_edges (self , i , j ):
88- result = 0
89- result += self .water_edge(i - 1 , j)
90- result += self .water_edge(i, j + 1 )
91- result += self .water_edge(i + 1 , j)
92- result += self .water_edge(i, j - 1 )
93- return result
80+ for i in range (len (grid)):
81+ for j in range (len (grid[0 ])):
82+ if grid[i][j] == 1 :
83+ perimeter += self .water_side_count(i, j)
9484
95- def water_edge (self , i , j ):
96- if i < 0 or i >= len (self .grid):
97- return 1
85+ return perimeter
9886
99- if j < 0 or j >= len (self .grid[0 ]):
100- return 1
101-
102- if self .grid[i][j] == 0 :
103- return 1
104-
105- return 0
87+ def water_side_count (self , i , j ):
88+ side_count = 0
89+
90+ for a, b in [
91+ (- 1 , 0 ),
92+ (0 , - 1 ), (0 , 1 ),
93+ (1 , 0 ),
94+ ]:
95+ m = i + a
96+ n = j + b
97+
98+ if m < 0 or n < 0 or m >= len (self .grid) or n >= len (self .grid[0 ]) \
99+ or self .grid[m][n] == 0 :
100+ side_count += 1
101+
102+ return side_count
106103```
107104
108105### Solution 2: Depth-First Search the Island (complex way)
0 commit comments