给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
function numIslands(grid: string[][]): number {
// dfs 回溯 都是基于当前节点,判断当前路径,可选择路
// 1, 我犯的第一个错误: 没有理解dfs,回溯的核心,基于当前点,思考我应该做什么
// 其次没有理解沉默岛屿的核心,既然不想多累加,那就把基于当前岛屿把所有横轴,纵轴全部都沉默
// 我直接在for循环里面再次递归,那就每次都从00开始,明显是错误的,我只是每次都基于当前点把上下左右的岛屿成魔
// 错误的理解了x周和y周,后续写一定要先画图,不要混乱的情况下去定义坐标 ,我就定左侧为横轴,顶部方向为y轴
let result = 0;
let m = grid.length;
let n = grid[0].length;
const judgeIland = (i, j) => {
if (i >= m || j >= n || i < 0 || j < 0) return
if (grid[i][j] === '0') return
grid[i][j] = '0'
judgeIland(i, j - 1)
judgeIland(i, j + 1)
judgeIland(i - 1, j)
judgeIland(i + 1, j)
}
const dfs = (grid, i, j) => {
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (grid[i][j] === '1') {
result++
judgeIland(i, j)
}
}
}
}
dfs(grid, 0, 0)
return result
};