一、问题描述
二、解题思路
该题目采用递归方法:如果当前是“岛屿”,那么计算上下左右四个方向的面积值+1作为当前岛屿总面积返回。
三、代码实现
import java.util.*;
public class Solution {
int maxArea=0;
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型二维数组
* @return int整型
*/
public int maxAreaIsland (int[][] grid) {
boolean[][] isfindedArr=new boolean[grid.length][grid[0].length];
// 递归实现
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
maxArea=Math.max(maxArea,dfs(grid,isfindedArr,i,j));
}
}
return maxArea;
}
public int dfs(int[][] grid,boolean[][] isfinded,int i,int j){
int resArea=0;
if(grid[i][j]==1&&!isfinded[i][j]){
resArea++;
isfinded[i][j]=true;
if(i<grid.length-1){//向下
int downarea=dfs(grid,isfinded,i+1,j);
resArea+=downarea;
}
if(i>0){//向上
int uparea=dfs(grid,isfinded,i-1,j);
resArea+=uparea;
}
if(j<grid[0].length-1){//向右
int rightarea=dfs(grid,isfinded,i,j+1);
resArea+=rightarea;
}
if(j>0){//向左
int leftarea=dfs(grid,isfinded,i,j-1);
resArea+=leftarea;
}
return resArea;
}else{
return 0;
}
}
}
四、刷题链接
岛屿的最大面积_牛客题霸_牛客网