Go语言解LeetCode 463:岛屿周长详解与实现

蓝鲸
蓝鲸
发布时间:2026-10-15 | 2人浏览过
原创

本文详细讲解如何使用Go语言解决LeetCode第463题“岛屿周长”。针对由0(水)和1(陆地)组成的二维网格,我们遍历每个单元格,根据其与相邻单元格的连接情况累加周长,最终输出准确的岛屿边缘长度。

题目描述

给定一个 row x col 的二维网格地图 grid,其中:

  • grid[i][j] = 1 表示陆地;
  • grid[i][j] = 0 表示水域。

格子在水平和垂直方向相连(对角线不相连),整个网格被水完全包围,且恰好有一个岛屿(或多个相连的陆地组成)。岛屿内部没有“湖”。我们需要计算这个岛屿的周长。

示例 1:

输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]

输出:16

解释:它的周长是图中显示的黄边数量。

其他示例包括:

  • 输入:[[1]],输出:4
  • 输入:[[1,0]],输出:4

思路分析

计算周长的核心在于确定陆地单元格暴露在水域或边界上的边数。对于任意一个值为 1 的陆地单元格,它有四条边。如果某条边的邻居也是陆地(值为 1),则这条边不计入周长;如果邻居是水域(值为 0)或者处于网格外部(边界),则计入周长。

我们可以采用直接遍历法:

  1. 初始化周长计数器为 0。
  2. 遍历网格中的每一个单元格。
  3. 当发现单元格为陆地(值为 1)时,检查其上、下、左、右四个方向的邻居。
  4. 若某个方向的邻居越界或者是水域(值为 0),则将周长计数器加 1。

Go 语言 AC 代码

以下是标准的 Go 语言实现,包含必要的错误处理和边界检查。

package main

func islandPerimeter(grid [][]int) int {
	rows := len(grid)
	if rows == 0 {
		return 0
	}
	cols := len(grid[0])
	perimeter := 0

	for i := 0; i < rows; i++ {
		for j := 0; j < cols; j++ {
			// 只有当当前格子是陆地时才进行周长计算
			if grid[i][j] == 1 {
				// 向上判断
				if i == 0 || grid[i-1][j] == 0 {
					perimeter++
				}
				// 向下判断
				if i == rows-1 || grid[i+1][j] == 0 {
					perimeter++
				}
				// 向左判断
				if j == 0 || grid[i][j-1] == 0 {
					perimeter++
				}
				// 向右判断
				if j == cols-1 || grid[i][j+1] == 0 {
					perimeter++
				}
			}
		}
	}
	return perimeter
}

这段代码通过条件判断巧妙地结合了“索引越界”与“值为0”两种情况,统一处理了边界和内部的周长累加逻辑,保证了算法的高效性与准确性。

以上就是Go语言解LeetCode 463岛屿周长的详细内容,更多关于Go算法题解的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表