dfs只用来标记是不是已经访问过了, 遍历所有的节点, 不要使用MAP, 所有的返回条件都放在递归结束的位置做

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
}
}

Comments
Recent Posts
Untitled
Categories
Tags
Website Info
Article Count :
2
Total Word Count :
1.6k
Unique Visitors :
Page Views :
Last Update :