zoukankan      html  css  js  c++  java
  • 200. 岛屿的个数

    问题描述

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

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    
    输出: 1
    

    示例 2:

    输入:
    11000
    11000
    00100
    00011
    
    输出: 3
    

    解决方案

    import collections
    
    
    class Solution(object):
        def is_valid(self, grid, r, c):
            m, n = len(grid), len(grid[0])
            if r < 0 or c < 0 or r >= m or c >= n:
                return False
            return True
    
        def numIsLandsBFS(self, grid):
            if not grid or not grid[0]:
                return 0
            m, n = len(grid), len(grid[0])
            count = 0
            for i in range(m):
                for j in range(n):
                    if grid[i][j] == "1":
                        self.bfs(grid, i, j)
                        count += 1
            return count
    
        def bfs(self, grid, r, c):
            queue = collections.deque()
            queue.append((r, c))
            grid[r][c] = "0"
            while queue:
                directions = [(0, 1), (0, -1), (-1, 0), (1, 0)] # 方向键
                r, c = queue.popleft()
                for d in directions:
                    nr, nc = r + d[0], c + d[1]
                    if self.is_valid(grid, nr, nc) and grid[nr][nc] == '1':
                        queue.append((nr, nc))
                        grid[nr][nc] = '0'
    
    
    if __name__ == "__main__":
        s = Solution()
        my_sea = [["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"],
                  ["1", "1", "1", "1", "0"]]
        num = s.numIsLandsBFS(my_sea)
        print(num)
    
    
  • 相关阅读:
    Spring 总结
    分布式缓存Memcache
    Docker原理 -- namespace与CGroup
    JDK源码分析--Collections
    React生命周期总结
    【转】前端优化的35条
    http缓存与cdn相关技术
    跨域处理
    sequekize
    orm2
  • 原文地址:https://www.cnblogs.com/huang-yc/p/10703665.html
Copyright © 2011-2022 走看看