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:
247
247
248
248
249
249
## 其他语言版本
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