算法提高之LeetCode刷题数据结构和算法分析

岛屿数量

2020-04-20  本文已影响0人  _阿南_

题目:

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

题目的理解:

1相邻的是一个岛屿,遍历数组,当碰到1则记录一个岛屿A,然后将1相连的1都设置为2,说明已经搜索过。
等遍历结束,返回所有A的总和。

python实现

from typing import List

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if len(grid) <= 0:
            return 0

        m = len(grid)
        n = len(grid[0])

        def isIsland(row: int, column: int):
            if grid[row][column] != '1':
                return

            grid[row][column] = '2'

            for x, y in [(row, column - 1), (row + 1, column), (row, column + 1), (row - 1, column)]:
                if 0 <= x < m and 0 <= y < n:
                    if grid[x][y] == '1':
                        isIsland(x, y)

        count = 0
        for i in range(m):
            for j in range(n):
                if grid[i][j] == '1':
                    count += 1
                    isIsland(i, j)
        
        return count

想看最优解法移步此处

提交

ok

感觉每日打卡,被困难难度折磨了一个月后,发现看到中等难度的时候,莫名的喜悦,又是一次性打卡通过,么么哒。
每次做题后,把官方提供的最优解也学习下,进步杠杠的

// END 放下攀比,每天做到进步一点点

上一篇下一篇

猜你喜欢

热点阅读