- 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: grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
Output: 1
Example 2:
Input: grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]
Output: 3
代码:
class Solution {
// DFS位图思想
public int numIslands(char[][] grid) {
int count = 0;
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[0].length; j++){
// 只要是1代表的岛屿,为了重复遍历过后变为水
if (grid[i][j] == '1') {
// 是岛屿,DFS
gridDFS(grid, i, j);
// 判断为一个岛屿
count++;
}
}
}
return count;
}
private void gridDFS(char[][] grid, int i, int j){
// 边界判断
if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0'){
return;
}
// 1 -> 0
grid[i][j] = '0';
gridDFS(grid, i - 1, j); // 左
gridDFS(grid, i, j + 1); // 上
gridDFS(grid, i + 1, j); // 右
gridDFS(grid, i, j - 1); // 下
}
}