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