题目:
给你一个由 '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 放下攀比,每天做到进步一点点
网友评论