【leetcode】1905.统计子岛屿

122 阅读1分钟

leetcode-1905.png

题目简述:两个大小相同的地图,计算其中的子岛屿。子岛屿的定义就是,在同样的位置,都是陆地,且grid1中的岛屿面积大于grid2中的岛屿面积

这一题就需要一丢丢技巧了,需要先预处理下数据

这里的预处理就是要找出,在grid1中是海洋的地方,在grid2中是陆地的地方,然后将grid2的这块陆地给淹没,且grid2中跟这块陆地相连的其他陆地也要淹没,这样就达成预处理的目的了。

sample.png

粉色地方就是应该被淹没的地方

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
};