zoukankan      html  css  js  c++  java
  • leetcode-200 岛屿数量

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

    岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

    此外,你可以假设该网格的四条边均被水包围。

    遍历求联通性,递归+方向 感觉好憨

    def check(a,total):
    
        x,y = len(a),len(a[0])
        for i in range(x):
            for j in range(y):
                if a[i][j] == 0:
                    continue
                if a[i][j] == 1:
                    # 找到当前的开始点
                    a[i][j] = '0'
                    total += 1
                    dfs(i,j,a,x,y)
    
    
        #
        return total
    
    
    def dfs(x, y, a,m ,n):
    
    #     方向 上 左 下 右
        directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
        for dire in directions:
            # 考虑边界情况
            tmp = (x+dire[0],y+dire[1])
            if 0 <= tmp[0] <= m-1 and 0 <= tmp[1] <= n-1:
                if a[tmp[0]][tmp[1]] == 1:
                    a[tmp[0]][tmp[1]] = 0
                    dfs(tmp[0],tmp[1],a,m,n)
    
    

    代码优化 看别人在dfs里面把坐标方向和当前坐标直接运算,写出来是为了更加通俗易懂

  • 相关阅读:
    php简单实现MVC
    windows获取窗口句柄
    UPX编译及so加固
    Markdown: Syntax
    Markdown: Syntax Text
    BIOS将MBR读入0x7C00地址处(x86平台下)
    TPFanControl.ini
    深入浅出GNU X86-64 汇编
    CPU vector operations
    Google开源项目风格指南
  • 原文地址:https://www.cnblogs.com/zengmu/p/13157518.html
Copyright © 2011-2022 走看看