python-leetcode-200-岛屿的个数

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

示例 1:

输入:
11110
11010
11000
00000

输出:  1

示例 2:

输入:
11000
11000
00100
00011

输出: 3

代码如下:

class Solution:
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        if len(grid) == 0:
            return 0
        x = len(grid[0])-1
        y = len(grid) -1


        maxl = 0 #岛屿个数

        for i in range(0,y+1):
            for p in range(0,x+1):
                now = grid[i][p]
                if now == "1":
                    maxl = maxl + 1
                    l = []
                    l.append([i,p])

                    while len(l) != 0:


                        nowi,nowp = l.pop()


                        grid[nowi][nowp] = maxl

                        #上
                        if nowi != 0:
                            if grid[nowi-1][nowp] == "1":
                                l.append([nowi-1,nowp])

                        #下
                        if nowi != y:
                            if grid[nowi+1][nowp] == "1":
                                l.append([nowi+1,nowp])
                        #左
                        if nowp != 0:
                            if grid[nowi][nowp-1] == "1":
                                l.append([nowi,nowp-1])

                        #右
                        if nowp != x:
                            if grid[nowi][nowp+1] == "1":
                                l.append([nowi,nowp+1])
        return maxl

当然大家可以考虑用DFS做法!

发布了46 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/SMith7412/article/details/88628129