File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed
Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -247,3 +247,35 @@ public:
247247
248248
249249## 其他语言版本
250+
251+ ### Java
252+
253+ 下面的代码使用的是深度优先搜索 DFS 的做法。为了统计岛屿数量同时不重复记录,每当我们搜索到一个岛后,就将这个岛 “淹没” —— 将这个岛所占的地方从 “1” 改为 “0”,这样就不用担心后续会重复记录这个岛屿了。而 DFS 的过程就体现在 “淹没” 这一步中。详见代码:
254+
255+ ``` java
256+ public int numIslands(char [][] grid) {
257+ int res = 0 ; // 记录找到的岛屿数量
258+ for (int i = 0 ;i < grid. length;i++ ){
259+ for (int j = 0 ;j < grid[0 ]. length;j++ ){
260+ // 找到“1”,res加一,同时淹没这个岛
261+ if (grid[i][j] == ' 1' ){
262+ res++ ;
263+ dfs(grid,i,j);
264+ }
265+ }
266+ }
267+ return res;
268+ }
269+ // 使用DFS“淹没”岛屿
270+ public void dfs(char [][] grid, int i, int j){
271+ // 搜索边界:索引越界或遍历到了"0"
272+ if (i < 0 || i >= grid. length || j < 0 || j >= grid[0 ]. length || grid[i][j] == ' 0' ) return ;
273+ // 将这块土地标记为"0"
274+ grid[i][j] = ' 0' ;
275+ // 根据"每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成",对上下左右的相邻顶点进行dfs
276+ dfs(grid,i - 1 ,j);
277+ dfs(grid,i + 1 ,j);
278+ dfs(grid,i,j + 1 );
279+ dfs(grid,i,j - 1 );
280+ }
281+ ```
You can’t perform that action at this time.
0 commit comments