LeetCode 463. 岛屿的周长
题目描述
思路分析
- 遍历网格:遍历整个网格,对于每个
1
,计算其周长。- 周长计算:对于每个陆地单元格,检查其四个方向。(上、下、左、右)
- 如果相邻的单元格是
0
或者越界,则周长加 1。- 如果相邻的单元格是
1
,则不增加周长。- 边界条件:需要确保在检查相邻单元格时不越界。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
func islandPerimeter(grid [][]int) int {
if len(grid) == 0 {
return 0
}
row := len(grid)
col := len(grid[0])
perimeter := 0
for r := 0; r < row; r++ {
for c := 0; c < col; c++ {
if grid[r][c] == 1 {
// 检查四个方向
perimeter += 4 // 每个陆地单元初始周长为4
if r > 0 && grid[r-1][c] == 1 { // 上
perimeter -= 1
}
if r < row-1 && grid[r+1][c] == 1 { // 下
perimeter -= 1
}
if c > 0 && grid[r][c-1] == 1 { // 左
perimeter -= 1
}
if c < col-1 && grid[r][c+1] == 1 { // 右
perimeter -= 1
}
}
}
}
return perimeter
}
- 时间复杂度:O (M * N),其中 M 是网格的行数,N 是列数。每个单元格最多被访问一次。
- 空间复杂度:O (1),只使用了常数空间来存储周长。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用