【岛屿专题3】
leetcode 463. 岛屿的周长
代码
class Solution {
public int islandPerimeter(int[][] grid) {
int perimeter = 0;
for(int i=0; i<grid.length; i++){
for(int j=0; j<grid[0].length; j++){
if(grid[i][j] == 1){
perimeter = dfs(grid,i,j);
break; //因为只有一个岛屿,搜索一次就可以得到结果,就可以提前终止了
}
}
}
return perimeter;
}
public int dfs(int[][] grid, int i, int j){
//网格边界一定是岛屿的边,返回1
if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) return 1;
//与海水相邻的边也是岛屿的边,返回1
if(grid[i][j] == 0) return 1;
//搜索过的陆地的边不是岛屿的边
if(grid[i][j] == 2) return 0;
//搜索过的陆地进行标记
grid[i][j] = 2;
//没有搜索过的陆地则继续搜索
return dfs(grid,i-1,j) + dfs(grid,i+1,j) + dfs(grid,i,j-1) + dfs(grid,i,j+1);
}
}