岛屿数量

作者: _阿南_ | 来源:发表于2020-04-20 09:47 被阅读0次

    题目:

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
    岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
    此外,你可以假设该网格的四条边均被水包围。
    示例 1:
    输入:
    11110
    11010
    11000
    00000
    输出: 1
    示例 2:
    输入:
    11000
    11000
    00100
    00011
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
    

    题目的理解:

    1相邻的是一个岛屿,遍历数组,当碰到1则记录一个岛屿A,然后将1相连的1都设置为2,说明已经搜索过。
    等遍历结束,返回所有A的总和。

    python实现

    from typing import List
    
    class Solution:
        def numIslands(self, grid: List[List[str]]) -> int:
            if len(grid) <= 0:
                return 0
    
            m = len(grid)
            n = len(grid[0])
    
            def isIsland(row: int, column: int):
                if grid[row][column] != '1':
                    return
    
                grid[row][column] = '2'
    
                for x, y in [(row, column - 1), (row + 1, column), (row, column + 1), (row - 1, column)]:
                    if 0 <= x < m and 0 <= y < n:
                        if grid[x][y] == '1':
                            isIsland(x, y)
    
            count = 0
            for i in range(m):
                for j in range(n):
                    if grid[i][j] == '1':
                        count += 1
                        isIsland(i, j)
            
            return count
    

    想看最优解法移步此处

    提交

    ok

    感觉每日打卡,被困难难度折磨了一个月后,发现看到中等难度的时候,莫名的喜悦,又是一次性打卡通过,么么哒。
    每次做题后,把官方提供的最优解也学习下,进步杠杠的

    // END 放下攀比,每天做到进步一点点

    相关文章

      网友评论

        本文标题:岛屿数量

        本文链接:https://www.haomeiwen.com/subject/mcelihtx.html