dfs只用来标记是不是已经访问过了, 遍历所有的节点, 不要使用MAP, 所有的返回条件都放在递归结束的位置做
java
class Solution {
/**
* dfs只用来标记是不是已经访问过了, 遍历所有的节点, 不要使用MAP,
* 所有的返回条件都放在递归结束的位置做
*/
public int numIslands(char[][] grid) {
boolean[][] visited = new boolean[grid.length][grid[0].length];
int ans = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == '1'&& !visited[i][j]) {
dfs(i, j, grid, visited);
ans++;
}
}
}
return ans;
}
private void dfs(int x, int y, char[][] grid, boolean[][] visited) {
if (!inBounds(x, y, grid) || visited[x][y] || grid[x][y] != '1')
return ;
visited[x][y] = true;
// 向四个方向探索
dfs(x+1, y, grid, visited);
dfs(x-1, y, grid, visited);
dfs(x, y-1, grid, visited);
dfs(x, y+1, grid, visited);
}
private boolean inBounds(int x, int y, char[][] matrix) { return
x >= 0 && x < matrix.length &&
y >= 0 && y < matrix[0].length;
}
}