動機
以為是要數幾座島,結果是要數島的面積
Problem
You are given an m x n
binary matrix grid
. An island is a group of 1
's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.
The area of an island is the number of cells with a value 1
in the island.
Return the maximum area of an island in grid
. If there is no island, return 0
.
Example 1:
Input: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]Output: 6Explanation: The answer is not 11, because the island must be connected 4-directionally.
Example 2:
Input: grid = [[0,0,0,0,0,0,0,0]]Output: 0
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j]
is either0
or1
.
Sol
def dfs(g,i,j):
if 0 > i or 0 > j or i >= len(g) or j >= len(g[0]) or g[i][j][1] or g[i][j][0] == 0:
return 0
else:
ret = 1
g[i][j][1] = True
for (x,y) in [(i+1,j),(i,j+1),(i-1,j),(i,j-1)]:
ret += dfs(g,x,y)
return ret
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
ret = 0
g = [[[x,False] for x in gg] for gg in grid]
for i in range(len(g)):
for j in range(len(g[0])):
ret = max(ret, dfs(g,i,j))
return ret