【Leetcode】岛屿问题(数量,周长,面积)
生活随笔
收集整理的這篇文章主要介紹了
【Leetcode】岛屿问题(数量,周长,面积)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
核心思路:
DFS四鄰域感染島嶼,遍歷數(shù)組,每找到一塊陸地(==1)后,將其感染(==2),并將與其接觸的陸地全部感染
數(shù)量
給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網(wǎng)格,請你計(jì)算網(wǎng)格中島嶼的數(shù)量。
島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。
此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。
class Solution:def numIslands(self, grid: List[List[str]]) -> int:row = len(grid)col = len(grid[0])num = 0def infect(i,j):if not 0<=i<row or not 0<=j<col or grid[i][j]!='1':return Nonegrid[i][j] = '2'infect(i+1,j)infect(i-1,j)infect(i,j+1)infect(i,j-1) for i in range(row):for j in range(col):if grid[i][j] == '1':infect(i,j)num += 1return num面積
找到給定的二維數(shù)組中最大的島嶼面積。(如果沒有島嶼,則返回面積為 0 )
class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:row = len(grid)col = len(grid[0])numMax = 0def infect(i,j):if not 0<=i<row or not 0<=j<col or grid[i][j]!=1:return 0grid[i][j] = 2return 1+infect(i+1,j)+infect(i-1,j)+infect(i,j+1)+infect(i,j-1)for i in range(row):for j in range(col):if grid[i][j] == 1:numMax = max(numMax,infect(i,j))return numMax周長
網(wǎng)格中的格子 水平和垂直 方向相連(對角線方向不相連)。整個網(wǎng)格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有“湖”(“湖” 指水域在島嶼內(nèi)部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網(wǎng)格為長方形,且寬度和高度均不超過 100 。計(jì)算這個島嶼的周長。
class Solution:def islandPerimeter(self, grid: List[List[int]]) -> int:row = len(grid)col = len(grid[0])num = 0def infect(i,j):if not 0<=i<row or not 0<=j<col or grid[i][j] == 0:return 1# 不能用else,不然else的情況太復(fù)雜了if grid[i][j] == 2:return 0grid[i][j] = 2return infect(i+1,j) + infect(i-1,j)+infect(i,j+1)+infect(i,j-1)for i in range(row):for j in range(col):if grid[i][j] == 1:return infect(i,j)猜你喜歡:👇🏻
?【Leetcode】大神總結(jié)的所有TopK問題模板(基于快速排序)
?【Leetcode】二分法左側(cè)邊界右側(cè)邊界模板
?【Leetcode】背包問題模板
總結(jié)
以上是生活随笔為你收集整理的【Leetcode】岛屿问题(数量,周长,面积)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux修改目录为nobody,nfs
- 下一篇: 【编程】二叉搜索树的定义