题目描述:
解题思路:
之前总结过这类网格dfs模板题,多复习。
参考代码:
public int islandPerimeter(int[][] grid) {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if(grid[i][j]==1)
{
return dfs(grid,i,j);
}
}
}
return 0;
}
private int dfs(int[][] grid, int i, int j) {
//遇到边界或者是水的部分就返回1,
if(i>=grid.length||i<0||j>=grid[0].length||j<0||grid[i][j]==0)
{
return 1;
}
//遇到已经遍历过的陆地,返回0
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);
}
暴力:
public int islandPerimeter(int[][] grid) {
int num=0;
for (int i=0;i<grid.length;i++){
for (int j=0;j<grid[i].length;j++){
if (grid[i][j] == 1){
if (i<=0||grid[i-1][j]==0) num++;
if (i>=grid.length-1||grid[i+1][j]==0) num++;
if (j<=0||grid[i][j-1]==0) num++;
if (j>=grid[i].length-1||grid[i][j+1]==0) num++;
}
}
}
return num;
}