Description
You are given an m x n binary matrix grid. An island is a group of 1’s (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.
The area of an island is the number of cells with a value 1 in the island.
Return the maximum area of an island in grid. If there is no island, return 0.
Examples
Example 1:
Input: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Output: 6
Explanation: The answer is not 11, because the island must be connected 4-directionally.
Example 2:
Input: grid = [[0,0,0,0,0,0,0,0]]
Output: 0
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j] is either 0 or 1.
思路
深搜,好像也没什么说的
代码
class Solution {
int[][] grids;
public int countSize(int i, int j, int count) {
grids[i][j] = 0;
count += 1;
if (i + 1 < grids.length && grids[i + 1][j] == 1)
count = countSize(i + 1, j, count);
if (i - 1 >= 0 && grids[i - 1][j] == 1)
count = countSize(i - 1, j, count);
if (j + 1 < grids[0].length && grids[i][j + 1] == 1)
count = countSize(i, j + 1, count);
if (j - 1 >= 0 && grids[i][j - 1] == 1)
count = countSize(i, j - 1, count);
return count;
}
public int maxAreaOfIsland(int[][] grid) {
grids = new int[grid.length][grid[0].length];
grids = grid;
int max = 0;
// 遍历整张图表
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
// 进岛了
if (grids[i][j] == 1) {
max = Math.max(max, countSize(i, j, 0));
}
}
}
return max;
}
}