Leetcode 200. Number of Islands
Given a 2D grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
Input:
11110
11010
11000
00000
Output: 1
Example 2:
Input:
11000
11000
00100
00011
Output: 3
public class NumberOfIslands {
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int numberOfIslands = 0;
int rows = grid.length;
int cols = grid[0].length;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (grid[i][j] == '1') {
numberOfIslands++;
dfs(grid, i, j);
}
}
}
return numberOfIslands;
}
private void dfs(char[][] grid, int i, int j) {
int rows = grid.length;
int cols = grid[0].length;
// Base case: if out of bounds or already visited
if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] == '0') {
return;
}
// Mark the cell as visited
grid[i][j] = '0';
// Visit all four adjacent cells
dfs(grid, i + 1, j); // down
dfs(grid, i - 1, j); // up
dfs(grid, i, j + 1); // right
dfs(grid, i, j - 1); // left
}
}
Using Depth-First Search, we efficiently traverse and mark islands while keeping the algorithm’s complexity manageable.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?