# 一、题目描述

["1","1","1","1","0"],

["1","1","0","1","0"],

["1","1","0","0","0"],

["0","0","0","0","0"]

]

["1","1","0","0","0"],

["1","1","0","0","0"],

["0","0","1","0","0"],

["0","0","0","1","1"]

]

• m == grid.length
• n == grid[i].length
• 1 <= m, n <= 300
• grid[i][j] 的值为 '0' 或 '1'

# 二、思路讲解

## 2.1 方法一：深度优先遍历dfs

• (i, j) 越过矩阵边界;
• grid[i][j] == 0，代表此分支已越过岛屿边界。

# 三、Java代码实现

## 3.1 深度优先遍历dfs

class Solution {
public int numIslands(char[][] grid) {
int count = 0;
for(int i=0; i<grid.length; i++) {
for(int j=0; j<grid[0].length; j++) {
//一块联通区域只会被统计一次，因为一次完整的递归会将联通区域中所有1抹去
if(grid[i][j] == '1') {
dfs(grid, i, j);
count++;
}
}
}
return count;
}
/**
深度优先搜索
*/
void dfs(char [][]grid, int x, int y) {
//到达网格边缘或水边，终止递归（剪枝）
if(x<0 || y<0 || x>=grid.length || y>=grid[0].length || grid[x][y]=='0') {
return;
}
//将岛屿的1抹去，避免重复搜索
grid[x][y] = '0';
dfs(grid, x-1, y);
dfs(grid, x+1, y);
dfs(grid, x, y-1);
dfs(grid, x, y+1);
}
}

## 3.2 广度优先遍历bfs

class Solution {
public int numIslands(char[][] grid) {
int count = 0;
for(int i=0; i<grid.length; i++) {
for(int j=0; j<grid[0].length; j++) {
//一块联通区域只会被统计一次，因为一次完整的搜索会将联通区域中所有1抹去
if(grid[i][j] == '1') {
bfs(grid, i, j);
count++;
}
}
}
return count;
}
/**
广度优先搜索
*/
void bfs(char [][]grid, int i, int j) {
Queue<int []> queue = new LinkedList<>();
while(!queue.isEmpty()){
int []removeArray = queue.poll();
int x = removeArray[0];
int y = removeArray[1];
if(x>=0 && y>=0 && x<grid.length && y<grid[0].length && grid[x][y]=='1') {
//将岛屿上的1抹去，避免重复计算
grid[x][y] = '0';
}
}
}
}

|
15天前
|

[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
27 1
|
15天前
|

C++和Java中的随机函数你玩明白了吗？内附LeetCode470.rand7()爆改rand10()巨详细题解，带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗？内附LeetCode470.rand7()爆改rand10()巨详细题解，带你打败LeetCode%99选手
24 0
|
15天前
|

[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
25 0
|
15天前
|

[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
44 0
|
15天前
|

[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
31 0
|
6天前
|

JAVA数据结构刷题 -- 力扣二叉树
JAVA数据结构刷题 -- 力扣二叉树
12 0
|
15天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
20 0
|
15天前
|

【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
19 0
|
15天前
|

[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
30 0
|
15天前
|

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
23 0