朴实无华的深搜
class Solution {
int n;
int m;
int ans;
boolean[][] vis;
int[][] grid;
int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public int numEnclaves(int[][] grid) {
n = grid.length;
m = grid[0].length;
ans = 0;
vis = new boolean[n][m];
this.grid = grid;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
if(grid[i][j] == 1) {
if(i == 0 || j == 0 || i == n - 1 || j == m - 1) {
dfs(i, j);
}
ans++;
}
}
}
return ans;
}
void dfs(int x, int y) {
if(x < 0 || x >= n || y < 0 || y >= m || vis[x][y] == true || grid[x][y] == 0) {
return;
}
vis[x][y] = true;
ans--;
for(int[] dir : direction) {
dfs(x + dir[0], y + dir[1]);
}
}
}