解题思路:时间复杂度O(
r
∗
c
r*c
r∗c)r和c表示行列个数,也就是整张二维地图都遍历一边,空间复杂度O(
r
∗
c
r*c
r∗c)
一行一行的遍历地图,如果发现当前结点 = 1表示陆地,就从当前坐标开始进行深度优先遍历
遍历过的结点将其标记为已访问,然后朝向上下左右四个方向依次继续深度优先遍历,并将结果相加。
代码
classSolution{publicintmaxAreaOfIsland(int[][] grid){int max =0;//保存答案for(int r =0; r < grid.length; r++){for(int c =0; c < grid[0].length; c++){//遍历地图if(grid[r][c]==1){//如果是陆地,就进入深度优先遍历,统计其陆地大小int res =dfs(grid,r,c);//dfs
max =Math.max(max,res);//如果当前陆地更大,就保存其为答案}}}return max;//返回最大陆地大小}//深度优先遍历intdfs(int[][] grid,int r,int c){int m = grid.length,n = grid[0].length;//地图边界if(r<0||c<0||r>=m||c>=n)return0;//如果当前坐标不在地图中,返回0,表示当前坐标陆地面积为0if(grid[r][c]!=1)return0;//如果当前坐标在地图中,但是是海洋(0)或者已经统计过的陆地(2)的话,也返回0表示当前坐标陆地面积为0
grid[r][c]=2;//如果当前坐标是陆地,将其置为2,表示已经访问过//然后从当前坐标向4个方向走一步继续统计。return1+dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);}}