「leetcode」463. 岛屿的周长【模拟便可】详解
本文 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++学习指南知识点整理
如果感觉题解对你有帮助,不要吝啬给一个
题目链接:https://leetcode-cn.com/problems/island-perimeter/ 题目描述 给定一个 row x col 的二维网格地图 grid ,其中: ... 什么是3D全息投影技术 3D全息投影技术主要是利用干涉和衍射的原理将物体的三维图像进行再现,是全息摄影技术的逆向展示过程.其第一步是利用干涉原理记录物体光波信息,即拍摄过程;第二步是利用衍射原理再现物 ... 题目链接 Leetcode.463 岛屿的周长 easy 题目描述 给定一个 row x col的二维网格地图 grid,其中:grid[i][j] = 1表示陆地, grid[i][j] = 0表示 ... php利用curl 多线程 模拟 并发的详解 发布于 2014-12-07 10:17:25 | 265 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypert ... 一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子详解 觉得有用的话,欢迎一起讨论相互学习~ 参考文献 衷心感谢武汉科技大学张凯教授的精心培育和指导 以 ... 电路图简介: 本文主要介绍了单片机电流检测电路图大全(四款模拟电路设计原理图详解).它的主要功能是完成对过电压的瞬时值和峰值的检测.过电压次数的检测.电源输出电压和电流的检测,并通过键盘的操作显示出各 ... 三菱PLC与西门子plc的模拟量编程详解 Date:2015-01-01 origin:RCCN上海日成 Visit:2413 三菱和西门子的PLC都有自己的独特的长处的,先讲讲三菱2AD模块吧,2A ... 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地 ... 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ... 数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...「leetcode」463. 岛屿的周长【模拟便可】详解相关推荐
最新文章
热门文章