Skip to content

Commit 2e4a38e

Browse files
committed
463-island-perimeter.md Simplified Python solution.
1 parent 093670d commit 2e4a38e

File tree

2 files changed

+44
-50
lines changed

2 files changed

+44
-50
lines changed

en/1-1000/463-island-perimeter.md

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -71,38 +71,35 @@ And this graph has only one **connected components** (island).
7171
```python
7272
class 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)

zh/1-1000/463-island-perimeter.md

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -71,38 +71,35 @@ And this graph has only one **connected components** (island).
7171
```python
7272
class 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

Comments
 (0)