[leetcode] 200. Number of Islands
阿新 • • 發佈:2022-03-21
題目
Given an m x n
2D binary grid grid
which represents a map of '1'
s (land) and '0'
s (water), return the number of islands.
An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
Input: grid = [
["1","1","1","1","0"],
["1","1","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
]
Output: 1
Example 2:
Input: grid = [
["1","1","0","0","0"],
["1","1","0","0","0"],
["0","0","1","0","0"],
["0","0","0","1","1"]
]
Output: 3
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 300
-
grid[i][j]
is'0'
or'1'
.
思路
dfs,遍歷二維陣列,當遇到“1”時,使用dfs覆蓋周圍所有的“1”,並增加計數,直至遍歷結束。
程式碼
python版本:
class Solution: def numIslands(self, grid: List[List[str]]) -> int: def fill(x, y): if x < 0 or x >= len(grid) or y < 0 or y >= len(grid[0]) or grid[x][y] == '0': return grid[x][y] = '0' for l, r in [[0, 1], [0, -1], [1, 0], [-1, 0]]: fill(x+l, y+r) cnt = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == '1': cnt += 1 fill(i, j) return cnt