200. Number of Islands

2018-08-25  本文已影响0人  小歪与大白兔

题目大意:
给定一个由字符‘1’(陆地)和‘0’(水域)组成的二维网格地图,计算岛屿的个数。岛屿被水域环绕,由竖直或者水平方向邻接的陆地构成。你可以假设网格地图的四条边都被水域包围。

测试样例见题目描述。

题目思路:
做法是,我们对每个有“1”的位置进行dfs,把它和它四联通的位置全部变成“0”,这样就能把一个点推广到一个岛。

所以,我们总的进行了dfs的次数,就是总过有多少个岛的数目。

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        res = 0
        for row in range(len(grid)):
            for col in range(len(grid[0])):
                if grid[row][col] == '1':
                    res = res + 1
                    self.bfs(grid,row,col)
        return res

    def bfs(self,grid,row,col):
        #direction表示的是四个方向
        direction = [(-1,0),(1,0),(0,-1),(0,1)]
        grid[row][col] = '0'
        for d in direction:
            new_row = row + d[0]
            new_col = col + d[1]
            if 0<= new_row < len(grid) and 0<= new_col < len(grid[0]):
                if grid[new_row][new_col] == '1':
                    self.bfs(grid,new_row,new_col)
image.png
上一篇下一篇

猜你喜欢

热点阅读