1. 程式人生 > 其它 >[leetcode] 200. Number of Islands

[leetcode] 200. Number of Islands

題目

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