LeetCode 463. 岛屿的周长

题目描述

463. 岛屿的周长

image-20241019225231994

image-20241019225224056

思路分析

解法一:遍历计数边界(推荐)

核心思路

  • 每个陆地格子初始贡献 4 条边。
  • 若上方或左方是陆地,说明共享边,减去 2。
  • 累加所有格子的贡献得到周长。


复杂度分析

  • 时间复杂度:O(mn),其中 m、n 表示网格行列数。
  • 空间复杂度:O(1),仅使用常数额外变量。
class Solution {
    public int islandPerimeter(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int perimeter = 0;

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 1) {
                    perimeter += 4;
                    if (i > 0 && grid[i - 1][j] == 1) {
                        perimeter -= 2;
                    }
                    if (j > 0 && grid[i][j - 1] == 1) {
                        perimeter -= 2;
                    }
                }
            }
        }
        return perimeter;
    }
}
func islandPerimeter(grid [][]int) int {
	m := len(grid)
	n := len(grid[0])
	perimeter := 0

	for i := 0; i < m; i++ {
		for j := 0; j < n; j++ {
			if grid[i][j] == 1 {
				perimeter += 4
				if i > 0 && grid[i-1][j] == 1 {
					perimeter -= 2
				}
				if j > 0 && grid[i][j-1] == 1 {
					perimeter -= 2
				}
			}
		}
	}

	return perimeter
}

相似题目

题目 难度 考察点
463. 岛屿的周长 简单 网格遍历
695. 岛屿的最大面积 中等 DFS/BFS
200. 岛屿数量 中等 DFS/BFS
1020. 飞地的数量 中等 DFS/BFS
1254. 统计封闭岛屿的数目 中等 DFS/BFS
130. 被围绕的区域 中等 DFS/BFS
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/32824972
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!