200. 岛屿数量
深度优先搜索
class Solution {
int m;
int n;
int sum;
boolean[][] used;
int[][] move = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
public int numIslands(char[][] grid) {
m = grid.length;
n = grid[0].length;
used = new boolean[m][n];
/**
* 如果一个位置为1,则以其为起始节点开始进行搜索
* 最终岛屿的数量就是进行深度优先搜索的次数
*/
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1' && !used[i][j]){
sum++;
dfs(grid, i, j);
}
}
}
return sum;
}
/**
* 每次遍历到一个1就标记为已使用
* 再从四周寻找下一个没有遍历过的1
*/
public void dfs(char[][] grid, int row, int col){
used[row][col] = true;
for (int i = 0; i < 4; i++) {
int newRow = row + move[i][0];
int newCol = col + move[i][1];
if (newRow >= 0 && newRow < m && newCol >= 0 && newCol < n && grid[newRow][newCol] == '1' && !used[newRow][newCol]){
dfs(grid, newRow, newCol);
}
}
}
}
/**
* 时间复杂度 O(m×n)
* 空间复杂度 O(m×n)
*/
https://leetcode-cn.com/problems/number-of-islands/