LeetCode--200.Number of Islands(孤岛个数)Python

题目:

给定一个2维网格图,其中“1”(陆地)和“0”(水),计算岛屿的数量。岛屿被水包围,通过水平或垂直连接相邻的陆地形成。你可以假设网格的四边都被水包围着。例子如下图所示

解题思路:

从最左上角开始遍历这个网格图,当遍历到该点值为1的时候,将其更新为0,并以该点进行扩展,扩展方式为上下左右四个方向,扩展到的陆地(即值为1)将其值更新为0,直到不能扩展。再继续遍历下一个值为1点的,更新为0后进行扩展。

代码(Python):

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        output = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]=='1':
                    output += 1
                    self.dfs(grid,i,j)
        return output
    
    def dfs(self,grid,i,j):
        grid[i][j] = '0'
        if i-1>=0 and grid[i-1][j]=='1':
            self.dfs(grid,i-1,j)
        if i+1<len(grid) and grid[i+1][j]=='1':
            self.dfs(grid,i+1,j)
        if j-1>=0 and grid[i][j-1]=='1':
            self.dfs(grid,i,j-1)
        if j+1<len(grid[0]) and grid[i][j+1]=='1':
            self.dfs(grid,i,j+1)
        
                    
        

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值