zoukankan      html  css  js  c++  java
  • leetcode 岛屿的个数 python

     
    岛屿的个数
     
     

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

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    
    输出: 1
    

    示例 2:

    输入:
    11000
    11000
    00100
    00011
    
    输出: 3


    我的思想:
      输入是一个二维数组,"0" 代表是水 "1"代表是陆地 (注意里面存的是字符串,很坑 我调了半天才发现)
      
      从左上角(0, 0)开始 遍历所有位置 一直到右下角 (m, n), 这个过程中
        如果发现当前位置是"1", 先把这个位置标记为查询过,
        然后递归查看当前位置的上下左右四个位置,把是"1"的标记遍历过,再查看这个位置的上下左右
      
      实际上是一个循环 套了一个递归来实现。
      当发现一个陆地 就计数器自增1 然后和这个陆地相连的所有陆地都标记为已经查找过

      小技巧:
        遍历图的时候,边界位置要留意,左边没有左侧,上边没有上侧,右边没有右侧,下边没有下侧,
          可以写分支判断如果是边界就不遍历外侧。
        我选择的办法是,在图的外侧增加一圈"0", 相当于扩大了整个图,
          这样在递归陆地的过程中会节省了判断,并且不用考虑超出范围的问题。

    python代码:
     1 class Solution:
     2     def numIslands(self, grid):
     3         """
     4         :type grid: List[List[str]]
     5         :rtype: int
     6         """
     7         # 如果是空图 返回没有陆地
     8         if not grid:
     9             return 0
    10         # 把原图改变一下  四周加上一圈"0" 防止出界 方便遍历
    11         w, h = len(grid[0]), len(grid)
    12         new_grid = [["0" for i in range(w + 2)]]
    13         for g in grid:
    14             new_grid.append(["0"] + g + ["0"])
    15         new_grid.append(["0" for i in range(w + 2)])
    16         
    17         num = 0 # 记录陆地数量
    18         
    19         # 遍历除了周围的"0" 中间的部分
    20         for i in range(1, h+1):
    21             for j in range(1, w+1):
    22                 if new_grid[i][j] == "1":   # 如果是陆地 就进入深度遍历
    23                     num += 1
    24                     self.deep_search(i, j, new_grid)
    25         
    26         return num
    27     
    28     
    29     def deep_search(self, i, j, grid):
    30         """如果当前是陆地,把当前结点标记遍历过,并分别看左右上下四个位置"""
    31         if grid[i][j] == "0":
    32             return 
    33         grid[i][j] = "0"
    34         self.deep_search(i-1,j,grid)
    35         self.deep_search(i,j-1,grid)
    36         self.deep_search(i,j+1,grid)
    37         self.deep_search(i+1,j,grid)
    38         








  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/9720787.html
Copyright © 2011-2022 走看看