给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
function numIslands(grid: string[][]): number {
let count = 0
const m = grid.length;
const n = grid[0].length;
//先二维遍历所有的 1,一旦遇到 1,就进行 DFS 遍历,遍历和这个 1 相邻的所有 1 ,并将他们给变为 0
function DFS(i,j){
// 边界条件判断 以及 是否为水('0')
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] === '0') {
return;
}
//深度优先遍历当前的岛屿
const land = grid[i][j]
//先标记为 0,防止后续重复遍历
grid[i][j]='0'
if(land === '1') {
//上
DFS(i+1,j)
//下
DFS(i-1,j)
//左
DFS(i,j-1)
//右
DFS(i,j+1)
}
return
}
for(let i = 0;i<grid.length;i++){
for(let j = 0;j<grid[0].length;j++){
if(grid[i][j] === '1'){
count++
DFS(i,j)
}
}
}
return count
};