本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

题目链接

https://leetcode-cn.com/problems/island-perimeter/

思路

岛屿问题最容易让人想到BFS或者DFS,但是这道题还真的没有必要,别把简单问题搞复杂了。

解法一:

遍历每一个空格,遇到岛屿,计算其上下左右的情况,遇到水域或者出界的情况,就可以计算边了。

如图:

代码如下:(详细注释)

class Solution {
public:int direction[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};int islandPerimeter(vector<vector<int>>& grid) {int result = 0;for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] == 1) {for (int k = 0; k < 4; k++) {       // 上下左右四个方向int x = i + direction[k][0];int y = j + direction[k][1];    // 计算周边坐标x,yif (x < 0                       // i在边界上|| x >= grid.size()     // i在边界上|| y < 0                // j在边界上|| y >= grid[0].size()  // j在边界上|| grid[x][y] == 0) {   // x,y位置是水域result++;}}}}}return result;}
};

解法二:

计算出总的岛屿数量,因为有一对相邻两个陆地,边的总数就减2,那么在计算出相邻岛屿的数量就可以了。

result = 岛屿数量 * 4 - cover * 2;

如图:

代码如下:(详细注释)

class Solution {
public:int direction[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};int islandPerimeter(vector<vector<int>>& grid) {int sum = 0;    // 陆地数量int cover = 0;  // 相邻数量for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] == 1) {sum++;// 统计上边相邻陆地if(i - 1 >= 0 && grid[i - 1][j] == 1) cover++;// 统计左边相邻陆地if(j - 1 >= 0 && grid[i][j - 1] == 1) cover++;// 为什么没统计下边和右边? 因为避免重复计算}}}return sum * 4 - cover * 2;}
};

我是程序员Carl,利用工作之余重刷leetcode,更多精彩算法文章尽在:代码随想录,关注后,回复「Java」「C++」「python」「简历模板」等等,有我整理多年的学习资料,可以加我微信,备注「简单自我介绍」+「组队刷题」,拉你进入刷题群,每天一道经典题目分析,我选的每一道题目都不是孤立的,而是由浅入深一脉相承的,如果跟住节奏每篇连续着看,定会融会贯通。

以下资料希望对你有帮助:

  • Carl的开源项目以及开源项目
  • Carl的B站视频:算法和编程语言的讲解
  • C++面试&C++学习指南知识点整理

如果感觉题解对你有帮助,不要吝啬给一个

「leetcode」463. 岛屿的周长【模拟便可】详解相关推荐

  1. 【LeetCode】463. 岛屿的周长

    题目链接:https://leetcode-cn.com/problems/island-perimeter/​​​​​​​ 题目描述 给定一个 row x col 的二维网格地图 grid ,其中: ...

  2. 全息投影是计算机技术吗,「图文」3D全息投影技术原理【图文详解】-火米互动...

    什么是3D全息投影技术 3D全息投影技术主要是利用干涉和衍射的原理将物体的三维图像进行再现,是全息摄影技术的逆向展示过程.其第一步是利用干涉原理记录物体光波信息,即拍摄过程;第二步是利用衍射原理再现物 ...

  3. Leetcode.463 岛屿的周长

    题目链接 Leetcode.463 岛屿的周长 easy 题目描述 给定一个 row x col的二维网格地图 grid,其中:grid[i][j] = 1表示陆地, grid[i][j] = 0表示 ...

  4. php curl 模拟多线程,php利用curl 多线程 模拟 并发的详解

    php利用curl 多线程 模拟 并发的详解 发布于 2014-12-07 10:17:25 | 265 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypert ...

  5. 模拟二进制交叉算子详解

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子详解 觉得有用的话,欢迎一起讨论相互学习~ 参考文献 衷心感谢武汉科技大学张凯教授的精心培育和指导 以 ...

  6. 单片机电流检测电路图大全(四款模拟电路设计原理图详解) - 信号处理电子电路图

    电路图简介: 本文主要介绍了单片机电流检测电路图大全(四款模拟电路设计原理图详解).它的主要功能是完成对过电压的瞬时值和峰值的检测.过电压次数的检测.电源输出电压和电流的检测,并通过键盘的操作显示出各 ...

  7. 三菱模块增益和偏置调整步骤_三菱PLC与西门子plc的模拟量编程详解

    三菱PLC与西门子plc的模拟量编程详解 Date:2015-01-01 origin:RCCN上海日成 Visit:2413 三菱和西门子的PLC都有自己的独特的长处的,先讲讲三菱2AD模块吧,2A ...

  8. leetcode 463. 岛屿的周长

    给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地 ...

  9. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  10. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

    数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...

最新文章

  1. 利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力
  2. STM32 基础系列教程 14 - IIC
  3. 基于SNMP的MIB库访问实现的研究
  4. 访问Mysql数据库,连接字符串配置
  5. 基于Flask实现后台权限管理系统 - 表设计
  6. 超详细图解!【MySQL进阶篇】MySQL架构原理
  7. ThreadLocal的非数据安全用法
  8. 【转】Dynamics 365中开发和注册插件介绍
  9. 进程同步与互斥的区别
  10. netcat、ncc工具使用
  11. 打开wmware没反应_白酒打开后能存放多久?
  12. It's my life
  13. javascript单元测试工具- -QUnit
  14. zookeeper学习之环境搭建
  15. python分秒换算_如何将度分秒转换为度分
  16. 【ESP32】HardwareSerial库使用
  17. 3D线激光成像数学模型简析
  18. dialog 程序 表控制
  19. jquery左侧图片与右侧图片以及放大镜和图片的放大的图片和产品的隐藏的效果
  20. Docker网络及资源管理

热门文章

  1. 《Java 程序设计》课堂实践二
  2. 200个化工网站批量爬取
  3. 算法设计 分析篇(摊销分析)
  4. ORB-SLAM2 ROS运行
  5. 第一章-操作系统概论
  6. 爬虫 知识点 总结。
  7. 简练软考知识点整理-管理沟通
  8. OpenCV c接口与c++接口
  9. ubuntu 18.04 安装 LNMP后,nginx 和 apachae 冲突
  10. 利用MindManager,制作简易的漏斗图