给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。

网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

示例 :

输入:

[[0,1,0,0],

[1,1,1,0],

[0,1,0,0],

[1,1,0,0]]

输出: 16

解释: 它的周长是下面图片中的 16 个黄色的边:

island.png

解题思路:

虽然耗时长,内存消耗大,但是是最容易想到的一种方式,遍历切片,如果当前位置是岛屿,总算加4,检查上下左右,如果有相邻岛屿,则总数 -1.

也可以简化为只检查右侧和下面,如果右边是岛屿,-2,如果下面是岛屿,-2,这样只用判断两个方向,而不需要判断四个方向了

代码如下:

func islandPerimeter(grid [][]int) int {

r, c := len(grid), len(grid[0])

sum := 0

for i, row := range grid {

for j, v := range row {

if v == 1 {

sum += 4

//下方同一列为陆地

if i + 1 < r && grid[i + 1][j] == 1 {

sum -= 2

}

//右侧相邻位置为陆地

if j + 1 < c && grid[i][j + 1] == 1 {

sum -= 2

}

}

}

}

return sum

}

有疑问加站长微信联系(非本文作者)

岛屿周长c语言,岛屿的周长 --leetcode刷题,golang实现相关推荐

  1. Leetcode刷题 463题:岛屿的周长(基于Java语言)

    ** Leetcode刷题 463题:岛屿的周长(基于Java语言) ** 一. 题目描述: 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相 ...

  2. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  3. Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)

    ** Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言) ** 题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top( ...

  4. Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)

    Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言) 题目: 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元 ...

  5. Leetcode刷题 155题: 最小栈(基于python3和c++两种语言)

    ** Leetcode刷题 155题: 最小栈(基于python3和c++两种语言) ** ** 题目: ** 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. ...

  6. Leetcode刷题 1441题: 用栈操作构建数组(基于python3和c++两种语言)

    Leetcode刷题 1441题: 用栈操作构建数组(基于python3和c++两种语言) ** 题目: ** 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2 ...

  7. LeetCode刷题——哈希表(python语言)

    LeetCode刷题--哈希表(python语言) 一.哈希表 1.1 哈希表的概念 哈希表,也叫散列表.其实可以很像python的字典,也就是键(key)值(Hash(key))对,最简单也最常用的 ...

  8. leetcode刷题优质题解(C++,Python,Go语言)

    最近开始为秋招准备,深感自己的编程能力基础弱,遂希望通过刷leetcode来提升数据结构和算法分析能力.过程中发现了几个优质题解,分享给大家,尤其是Carl哥的代码随想录包含C++.Java.Pyth ...

  9. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  10. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

最新文章

  1. Apache Dubbo 3.0.0 正式发布 - 全面拥抱云原生
  2. oracle 查看监听命令_linux下使用Oracle常用命令
  3. Hadoop 系列之 Hive
  4. dedecms有缩略图则显示缩略图,没有则显示随机缩略图
  5. Kali linux 渗透测试(五)——渗透WPS攻击
  6. KVM: Guest CPU doesn’t match specification: missing features: hle,rtm 无法启动虚拟机,解决方法
  7. 天正cad计算机快捷键,天正CAD快捷键大全
  8. 活动预约报名小程序已优化点与待优化点
  9. css如何修改行内样式
  10. word下禁止显示回车符号
  11. [渝粤教育] 西南科技大学 交通管理与控制 在线考试复习资料2021版
  12. NVIDIA 驱动和CUDA下载官网地址
  13. 【前端】前端学习课程及内容概述
  14. css 一直图片适配所有手机背景图
  15. 银行业务--负债业务
  16. matlab——整数规划
  17. 【lstm预测】基于lstm实现时间序列数据预测matlab源码
  18. 脚本语言【JavaScript基础】JavaScript函数:声明+调用
  19. Java中如何保证线程安全性
  20. R语言double数据转成numeric类型

热门文章

  1. 两个故事讲述什么是消息队列
  2. 超实用的十条 VueRouter 高级技巧!
  3. BDD之cucumber
  4. JUC--005--locks1
  5. DOS攻击、DDOS攻击到底是啥
  6. 计算机三级网络技术知识点大全(一)
  7. 纽约大学工程学院计算机工程硕士,纽约大学New York University (NYU) MS Computer Engineering 计算机工程硕士...
  8. 【操作系统】实验三 进程调度模拟程序
  9. Qt 设置合适的字体大小
  10. 如何将SW工程图转换成CAD格式?