题目
思路
1.很明显的dfs/bfs
根据dfs把一整块的1都遍历一遍,同时进行标记访问,主函数中遍历grid数组,每遇到一次满足1条件的grid就sum++
2.代码
为了减少空间复杂度,这里没写visited数组,我们可以在每次经过1时手动改成0
class Solution {
//方位数组
private int[][] position = new int[][]{{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
private int m, n;
public int numIslands(char[][] grid) {
m = grid.length;
n = grid[0].length;
int sum = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1') {
sum++;
dfs(grid, i, j);
}
}
}
return sum;
}
//这里就不搞visited数组了,遍历到的网格全给他还原成0
public void dfs(char[][] grid, int x, int y) {
//归0,相当于访问过了
grid[x][y] = '0';
for (int i = 0; i < 4; i++) {
int nextX = x + position[i][0];
int nextY = y + position[i][1];
if (nextX >= 0 && nextX < m && nextY >= 0 && nextY < n && grid[nextX][nextY] == '1') {
dfs(grid, nextX, nextY);
}
}
}
}