Leetcode 200.岛屿数量

Time: 2019-08-11

题目描述

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000

输出: 1
示例 2:

输入:
11000
11000
00100
00011

输出: 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

DFS遍历,主循环是两重for循环,遇到元素为'1'的,就DFS,在DFS的过程中,将相连的元素置为'0'。

代码

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if grid == None or len(grid) == 0:
            return 0
        count = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == '1': # 从是1的元素开始遍历
                    self.dfs(grid, i, j)
                    count += 1
        return count
    
    def dfs(self, grid, i, j):
        row = len(grid)
        col = len(grid[0])
        
        # 递归出口
        if i < 0 or i >= row or j < 0 or j >= col or grid[i][j] == '0':
            return
        
        grid[i][j] = '0' # 将'1'变成0
        self.dfs(grid, i - 1, j)
        self.dfs(grid, i + 1, j)
        self.dfs(grid, i, j - 1)
        self.dfs(grid, i, j + 1) 

参考

https://leetcode-cn.com/problems/number-of-islands/solution/number-of-islands-shen-du-you-xian-bian-li-dfs-or-/

END.

你可能感兴趣的:(Leetcode 200.岛屿数量)