Skip to content

Commit a4c77f4

Browse files
committed
三刷200
1 parent a129d89 commit a4c77f4

File tree

3 files changed

+90
-23
lines changed

3 files changed

+90
-23
lines changed

docs/0200-number-of-islands.adoc

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,44 @@
11
[#0200-number-of-islands]
2-
= 200. Number of Islands
2+
= 200. 岛屿数量
33

4-
{leetcode}/problems/number-of-islands/[Number of Islands - LeetCode^]
4+
https://leetcode.cn/problems/number-of-islands/[LeetCode - 200. 岛屿数量 ^]
55

6-
Given a 2d grid map of `'1'`s (land) and `'0'`s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
6+
给你一个由 `1`(陆地)和 `0`(水)组成的的二维网格,请你计算网格中岛屿的数量。
77

8-
*Example 1:*
8+
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
99

10-
[subs="verbatim,quotes,macros"]
11-
----
12-
*Input:*
13-
11110
14-
11010
15-
11000
16-
00000
10+
此外,你可以假设该网格的四条边均被水包围。
1711

18-
*Output:* 1
19-
----
12+
*示例 1:*
2013

21-
*Example 2:*
14+
....
15+
输入:grid = [
16+
["1","1","1","1","0"],
17+
["1","1","0","1","0"],
18+
["1","1","0","0","0"],
19+
["0","0","0","0","0"]
20+
]
21+
输出:1
22+
....
2223

23-
[subs="verbatim,quotes,macros"]
24-
----
25-
*Input:*
26-
11000
27-
11000
28-
00100
29-
00011
24+
*示例 2:*
3025

31-
*Output:* 3
32-
----
26+
....
27+
输入:grid = [
28+
["1","1","0","0","0"],
29+
["1","1","0","0","0"],
30+
["0","0","1","0","0"],
31+
["0","0","0","1","1"]
32+
]
33+
输出:3
34+
....
35+
36+
*提示:*
37+
38+
* `m == grid.length`
39+
* `n == grid[i].length`
40+
* `+1 <= m, n <= 300+`
41+
* `grid[i][j]` 的值为 `0``1`
3342
3443
== 思路分析
3544

@@ -62,6 +71,15 @@ include::{sourcedir}/_0200_NumberOfIslands.java[tag=answer]
6271
include::{sourcedir}/_0200_NumberOfIslands_2.java[tag=answer]
6372
----
6473
--
74+
75+
三刷::
76+
+
77+
--
78+
[{java_src_attr}]
79+
----
80+
include::{sourcedir}/_0200_NumberOfIslands_3.java[tag=answer]
81+
----
82+
--
6583
====
6684

6785
== 参考资料

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@ endif::[]
165165
|{doc_base_url}/0033-search-in-rotated-sorted-array.adoc[题解]
166166
|⭕️ 重点关注有序部分,优先在有序部分查找,不在有序部分再去无序部分查找。注意判定有序部分的方法: `nums[0]``nums[mid]` 相比较,而不是 `nums[left]`(它的值会来回变)。
167167

168+
|{counter:codes}
169+
|{leetcode_base_url}/number-of-islands/[200. 岛屿数量^]
170+
|{doc_base_url}/0200-number-of-islands.adoc[题解]
171+
|✅ 想尝试并查集,结果失败。还是沉岛大法好啊!
172+
168173
|===
169174

170175
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0200_NumberOfIslands_3 {
4+
// tag::answer[]
5+
/**
6+
* @author D瓜哥 · https://www.diguage.com
7+
* @since 2025-04-06 15:18:59
8+
*/
9+
public int numIslands(char[][] grid) {
10+
int result = 0;
11+
12+
for (int r = 0; r < grid.length; r++) {
13+
for (int c = 0; c < grid[r].length; c++) {
14+
if (grid[r][c] == '1') {
15+
result++;
16+
dfs(grid, r, c);
17+
}
18+
}
19+
}
20+
return result;
21+
}
22+
23+
private void dfs(char[][] grid, int r, int c) {
24+
if (r < 0 || grid.length <= r
25+
|| c < 0 || grid[r].length <= c
26+
|| grid[r][c] != '1') {
27+
return;
28+
}
29+
grid[r][c] = '2';
30+
dfs(grid, r - 1, c);
31+
dfs(grid, r + 1, c);
32+
dfs(grid, r, c - 1);
33+
dfs(grid, r, c + 1);
34+
}
35+
// end::answer[]
36+
37+
public static void main(String[] args) {
38+
char[][] grid = {
39+
{'1', '0', '1', '1', '1' },
40+
{'1', '0', '1', '0', '1' },
41+
{'1', '1', '1', '0', '1' }};
42+
new _0200_NumberOfIslands_3().numIslands(grid);
43+
}
44+
}

0 commit comments

Comments
 (0)