mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Merge pull request #1608 from Xin-Sheng-5075/master
添加题目 200.岛屿数量 的 Java 版本
This commit is contained in:
@ -247,3 +247,35 @@ public:
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
### Java
|
||||
|
||||
下面的代码使用的是深度优先搜索 DFS 的做法。为了统计岛屿数量同时不重复记录,每当我们搜索到一个岛后,就将这个岛 “淹没” —— 将这个岛所占的地方从 “1” 改为 “0”,这样就不用担心后续会重复记录这个岛屿了。而 DFS 的过程就体现在 “淹没” 这一步中。详见代码:
|
||||
|
||||
```java
|
||||
public int numIslands(char[][] grid) {
|
||||
int res = 0; //记录找到的岛屿数量
|
||||
for(int i = 0;i < grid.length;i++){
|
||||
for(int j = 0;j < grid[0].length;j++){
|
||||
//找到“1”,res加一,同时淹没这个岛
|
||||
if(grid[i][j] == '1'){
|
||||
res++;
|
||||
dfs(grid,i,j);
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
//使用DFS“淹没”岛屿
|
||||
public void dfs(char[][] grid, int i, int j){
|
||||
//搜索边界:索引越界或遍历到了"0"
|
||||
if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0') return;
|
||||
//将这块土地标记为"0"
|
||||
grid[i][j] = '0';
|
||||
//根据"每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成",对上下左右的相邻顶点进行dfs
|
||||
dfs(grid,i - 1,j);
|
||||
dfs(grid,i + 1,j);
|
||||
dfs(grid,i,j + 1);
|
||||
dfs(grid,i,j - 1);
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user