LeetCode 463. 岛屿的周长

题目描述

🔥 463. 岛屿的周长

image-20241019225231994

image-20241019225224056

思路分析

  1. 遍历网格:遍历整个网格,对于每个 1,计算其周长。
  2. 周长计算:对于每个陆地单元格,检查其四个方向。(上、下、左、右)
    • 如果相邻的单元格是 0 或者越界,则周长加 1。
    • 如果相邻的单元格是 1,则不增加周长。
  3. 边界条件:需要确保在检查相邻单元格时不越界。

参考代码

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),只使用了常数空间来存储周长。

🍏 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/32824972
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!