Leetcode 1020. 飞地的数量(深度搜索)

这道题是上周竞赛的题目,当时被弄懵了,因为之前我并不会这些算法,接触算法也就两个多月,实属弟弟,现在再看,其实很简单。

给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地)。

移动是指在陆地上从一个地方走到另一个地方(朝四个方向之一)或离开网格的边界。

返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。

示例 1:

输入:[[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释:
有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。
示例 2:

输入:[[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:
所有 1 都在边界上或可以到达边界。

解法:

1.一个深度搜索,之后一个遍历
2.找到所有第一排和最后一排的 陆地,将其相连的陆地置为 2

class Solution {
    public int numEnclaves(int[][] A) {
        int row=A.length;
        int col=A[0].length;
        for(int j=0;j= 0 && nextJ >= 0 && nextJ < a[0].length && nextI < a.length && a[nextI][nextJ] == 1) {
                dfs(nextI, nextJ, a);
            }
        }
    }
}

你可能感兴趣的:(Leetcode 1020. 飞地的数量(深度搜索))