给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
解法:需要一个infect函数,将所有遍历过的“1”都变成“2”。
内在是一个递归函数,每一次从一个“1”开始,然后向四面八方重新开始递归,每一次都确定“1”而不是“0”或者“2”,遇到“0”或者“2”或者到了边界停止就完了,直接return。
没有返回值,修正矩阵。增加全局静态变量tempmax=0,每次进入新岛屿之前设置为0,完成之后直接进行一个比较。
class Solution {
static int tempmax = 0;
public int maxAreaOfIsland(int[][] grid) {
int a = 0;
int N = grid.length;
int M = grid[0].length;
//我们需要一个infect方法
//将所有的1转化成2 转化的时候计算数量即可。
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]==1){
tempmax = 0;
infect(grid,i,j,N,M); //每次infect都返回一个岛屿的最大值
a = Math.max(tempmax,a);
}
}
}
return a ;
}
public static void infect(int[][] m,int i,int j,int N ,int M){
if( i<0 || i>=N || j<0 || j>=M || m[i][j] != 1) //找完了!
return;
m[i][j] = 2;
tempmax++;
infect(m,i+1,j,N,M);
infect(m,i-1,j,N,M);
infect(m,i,j+1,N,M);
infect(m,i,j-1,N,M);
}
}