200. Number of Islands / 695. Max Area of Island
Input:
11110
11010
11000
00000
Output: 1Input:
11000
11000
00100
00011
Output: 3Last updated
Input:
11110
11010
11000
00000
Output: 1Input:
11000
11000
00100
00011
Output: 3Last updated
class Solution {
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) return 0;
int res = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == '1') {
dfs(grid, i, j);
res++;
}
}
}
return res;
}
private void dfs(char[][] grid, int i, int j) {
if (i < 0 || i >= grid.length || j < 0 || j >= grid[i].length) return;
if (grid[i][j] == '1') {
grid[i][j] = '2';
dfs(grid, i + 1, j);
dfs(grid, i - 1, j);
dfs(grid, i, j + 1);
dfs(grid, i, j - 1);
}
}
}[[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]][[0,0,0,0,0,0,0,0]]class Solution {
public int maxAreaOfIsland(int[][] grid) {
if (grid == null || grid.length == 0) return 0;
int res = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
int max = dfs(grid, i, j);
if (max > res) res = max;
}
}
}
return res;
}
private int dfs(int[][] grid, int i, int j) {
if (i < 0 || i >= grid.length || j < 0 || j >= grid[i].length || grid[i][j] != 1) return 0;
grid[i][j] = 2;
return 1 + dfs(grid, i + 1, j)
+ dfs(grid, i - 1, j)
+ dfs(grid, i, j + 1)
+ dfs(grid, i, j - 1);
}
}