题目简述:两个大小相同的地图,计算其中的子岛屿。子岛屿的定义就是,在同样的位置,都是陆地,且grid1中的岛屿面积大于grid2中的岛屿面积
这一题就需要一丢丢技巧了,需要先预处理下数据
这里的预处理就是要找出,在grid1中是海洋的地方,在grid2中是陆地的地方,然后将grid2的这块陆地给淹没,且grid2中跟这块陆地相连的其他陆地也要淹没,这样就达成预处理的目的了。
粉色地方就是应该被淹没的地方
var countSubIslands = function (grid1, grid2) {
let res = 0
let row = grid1.length, col = grid1[0].length
var dfs = function (i, j) {
if (i < 0 || i >= row || j < 0 || j >= col) return
if (grid2[i][j] === 0) return
grid2[i][j] = 0
dfs(i - 1, j)
dfs(i + 1, j)
dfs(i, j - 1)
dfs(i, j + 1)
}
for (let i = 0; i < row; ++i) {
for (let j = 0; j < col; ++j) {
// 淹没掉 1 中是水, 2 中是陆地的地方
if (grid1[i][j] === 0 && grid2[i][j] === 1) {
dfs(i, j) // 淹没 grid2相连的陆地
}
}
}
for (let i = 0; i < row; ++i) {
for (let j = 0; j < col; ++j) {
if (grid2[i][j] === 1) {
// 计算岛屿数量
dfs(i, j)
res++
}
}
}
return res
};