力扣 695. 岛屿的最大面积
题目描述:
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
解析:
深度优先遍历(dfs)
1.比甲板上的战舰的问题多个改动
2.辅助函数返回的该岛屿的面积大小
3.需求岛屿的最大面积,所以需要用count记录每个岛屿的大小,用result每次和count去比较,然后记录最大岛屿面积
Java:
public int maxAreaOfIsland(int[][] grid) {
int result = 0;
for(int row = 0; row < grid.length; row++) {
for(int col = 0; col < grid[0].length; col++) {
if(grid[row][col] == 1) {
int count = dfs(grid, row, col);
result = Math.max(result, count);
}
}
}
return result;
}
public int dfs(int[][] grid, int row, int col) {
if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length
|| grid[row][col] != 1) {
return 0;
}
int count = 1;
grid[row][col] = 0;
count += dfs(grid, row - 1, col);
count += dfs(grid, row + 1, col);
count += dfs(grid, row, col - 1);
count += dfs(grid, row, col + 1);
return count;
}
JavaScript:
var maxAreaOfIsland = function(grid) {
let result = 0;
for(let row = 0; row < grid.length; row++) {
for(let col = 0; col < grid[0].length; col++) {
if(grid[row][col] === 1) {
const count = dfs(row, col);
result = Math.max(result, count);
}
}
}
function dfs(row, col) {
if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length
|| grid[row][col] !== 1) {
return 0;
}
grid[row][col] = 0;
let count = 1;
count += dfs(row - 1, col);
count += dfs(row + 1, col);
count += dfs(row, col - 1);
count += dfs(row, col + 1);
return count;
}
return result;
};