Skip to content

Commit ffd54ed

Browse files
committed
2019-05-27
1 parent 5010806 commit ffd54ed

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution(object):
2+
def minArea(self, image, x, y):
3+
"""
4+
:type image: List[List[str]]
5+
:type x: int
6+
:type y: int
7+
:rtype: int
8+
"""
9+
m, n = len(image), len(image[0])
10+
visited = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
11+
12+
dx = [1, -1, 0, 0]
13+
dy = [0, 0, 1, -1]
14+
self.min_x, self.min_y, self.max_x, self.max_y = 0, 0, 0, 0
15+
16+
def dfs(x0, y0):
17+
# print (self.min_x, self.min_y, self.max_x, self.max_y, x0, y0)
18+
self.min_x = min(self.min_x, x0)
19+
self.max_x = max(self.max_x, x0)
20+
self.min_y = min(self.min_y, y0)
21+
self.max_y = max(self.max_y, y0)
22+
visited[x0][y0] = 1
23+
24+
for k in range(4):
25+
x = x0 + dx[k]
26+
y = y0 + dy[k]
27+
28+
if 0 <= x < m and 0 <= y < n and visited[x][y] == 0 and image[x][y] == "1":
29+
dfs(x, y)
30+
31+
for i in range(m):
32+
for j in range(n):
33+
if image[i][j] == "1":
34+
self.min_x, self.min_y, self.max_x, self.max_y = i, j, i, j
35+
dfs(i, j) #因为全部相连,所以一次主体DFS之后就可以返回
36+
# print (self.min_x, self.min_y, self.max_x, self.max_y)
37+
return (self.max_x - self.min_x + 1) * (self.max_y - self.min_y + 1)

0 commit comments

Comments
 (0)