假设我们有一个二进制矩阵。我们必须计算其中的岛屿数量。岛屿是一个被水包围的地方,是通过水平或垂直连接相邻的土地而形成的。我们可以假设网格的所有四个边缘都被水包围。
假设网格就像-
1 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 1 |
有三个岛屿。
为了解决这个问题,我们将遵循以下步骤-
将有两种方法,一种将用于计算称为numIslands()
和的岛的数量makeWater()
。该makeWater()
会像-
如果网格中的行数为0,则返回0
n =行数,m:=列数,ans:= 0
对于i,范围为0至n – 1
如果grid [i,j] = 1,则ans:= ans + 1
makeWater(i,j,n,m,grid)
对于0到m范围内的j
makeWater()
将采取指数I,J,ROW和COL计数n和m和网格
如果i <0或j <0或i> = n或j> = m,则从此方法返回
如果grid [i,j] = 0,则返回,否则返回grid [i,j]:= 0
调用makeWater(i + 1,j,n,m,grid)
调用makeWater(i,j + 1,n,m,grid)
让我们看下面的实现以更好地理解-
class Solution(object): def numIslands(self, grid): """ :type grid: List[List[str]] :rtype: int """ if len(grid) == 0: return 0 n= len(grid) m = len(grid[0]) ans = 0 for i in range(n): for j in range(m): if grid[i][j] == "1": ans+=1 self.make_water(i,j,n,m,grid) return ans def make_water(self,i,j,n,m,grid): if i<0 or j<0 or i>=n or j>=m: return if grid[i][j] == "0": return else: grid[i][j]="0" self.make_water(i+1,j,n,m,grid) self.make_water(i,j+1,n,m,grid) self.make_water(i-1,j,n,m,grid) self.make_water(i,j-1,n,m,grid)
[["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"]]
输出结果
3