Go语言题解LeetCode463岛屿的周长示例详解
作者:刘09k11 发布时间:2024-04-25 15:09:59
标签:Go,LeetCode,岛屿周长
题目描述
原题链接 :
463. 岛屿的周长 - 力扣(LeetCode)
给定一个 row x col
的二维网格地图 grid
,其中:grid[i][j] = 1
表示陆地, grid[i][j] = 0
表示水域。
网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
示例 1:
输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出:16
解释:它的周长是上面图片中的 16 个黄色的边
示例 2:
输入:grid = [[1]]
输出:4
示例 3:
输入:grid = [[1,0]]
输出:4
提示:
row == grid.length
col == grid[i].length
1 <= row, col <= 100
grid[i][j] 为 0 或 1
思路分析
本题中,我们可以针对每一个值为1的单元格,它的上下左右每有一个值为0的单元格则岛屿的周长加一。
我们可以简化计算,即针对每一个值为1的单元格,算出5分别减去每一个值为1的单元格和其上下左右单元格的值(因为如果该单元格为内陆,则其和其上下左右单元格的值的和为5)。
该题的难度在于边界的判定,我们为求边界判定简化,可以在二维数组grid数组周围加上一圈值为0的围墙,然后从[1,1]找到[hight+1][weight+1]。
AC 代码
public class Solution {
public int IslandPerimeter(int[][] grid) {
int w = grid[0].Length;
int h = grid.Length;
int c = 0;
int[][] g = new int[h + 2][];
for (int i = 0; i < h + 2; i++)
{
g[i] = new int[w+2];
for (int j = 0; j <w + 2; j++)
{
if (i == 0 || j == 0 || i == h + 1 || j == w + 1)
g[i][j] = 0;
else
g[i][j] = grid[i - 1][j - 1];
}
}
for (int i = 1; i < h + 1; i++)
{
for (int j = 1; j <w + 1; j++)
{
if (g[i][j] == 1)
c += 5 - g[i][j] - g[i - 1][j] - g[i + 1][j] - g[i][j - 1] - g[i][j + 1];
}
}
return c;
}
}
来源:https://juejin.cn/post/7175771246762655800


猜你喜欢
- if"""条件语句:ifif...elseif...elif...elseif 语句的格式:if 条件: &n
- 常规的异常捕获方式在 Promise 提供了一个 .catch 方法用来捕获异常,假设有很多异步请求,通常会把 .catch 方法放在链式调
- 最近使用Python 3.5写了一个GUI小程序,于是想将该写好的程序发布成一个exe文件,供自己单独使用。至于通过安装的方式使用该程序,我
- 本文实例为大家分享了mysql5.7安装图文教程供大家参考,具体内容如下1.在官网下载解压缩版2.解压后配置默认文件新建个my.ini(可以
- 一、安装并配置 JMeter下载官网下载,下载二进制的这个 zip配置环境变量然后解压到你喜欢的位置,配置环境变量,新建一个 JMETER_
- 代码如下:<% '隐藏并修改文件的最后修改时间的aspshell '原理:通过FSO可以修改文件的
- 目录1. 折线图概述1.1什么是折线图?1.2折线图使用场景1.3绘制折线图步骤1.4案例展示2. 折线2D属性2.1linestyle:折
- PyQt5布局控件QVBoxLayout简介采用QVBoxLayout类,按照从上到下的顺序添加控件本节内容较少,演示两个实例,便于明白QV
- 浏览器经常Cache你的页面,这是一个很麻烦的问题,下面先提出几种方案来解决一般的问题:(把下面的代码加入到asp程序的最开始位置)<
- 可实现类似于sql中的dateadd、datesub的功能两种获取日期的方式z=datetime.datetime(2016,12,5)z=
- 下载好所需程序1.Selenium简介Selenium是一个用于Web应用程序测试的工具,直接运行在浏览器中,就像真正的用户在操作一样。2.
- 目录jQuery的$.ajaxWebpack时代的开始深入了解Promise消灭嵌套await-to-js总结jQuery的$.ajax在开
- 本文实例讲述了Golang算法问题之数组按指定规则排序的方法。分享给大家供大家参考,具体如下:给出一个二维数组,请将这个二维数组按第i列(i
- 下面是出现的错误解释RuntimeError: An attempt ha
- 如果说您没用过这些东东的话,我相信看完这篇博文会对您有帮助的,,如果有任何问题不懂或者有bug没问题,欢迎随时联系我, 同时也欢迎高手多给点
- 本文实例讲述了Python操作Mongodb数据库的方法。分享给大家供大家参考,具体如下:一 导入 pymongofrom pymongo
- 背景我们先来看看MySQL 8.0的事务提交的大致流程以上流程,是MySQL8.0对WAL原则的一种实现,这个流程意味着,任何一个事务的提交
- /* --注意:准备数据(可略过,非常耗时) CREATE TABLE CHECK1_T1 ( ID INT, C1 CHAR(8000)
- 前言ppi-cpi 剪刀差大家可能都听说过,通过这个指标可以了解当前的经济运行状况,小编为了学习 python 的图形绘制,通过爬
- 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了。但群发消息不仅仅会把通讯录里面所有的好友骚扰