Leetcode463. Island Perimeter
题目
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。
网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
示例 :
输入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
输出: 16
解释: 它的周长是下面图片中的 16 个黄色的边:
考点
思路
solution1
如果这个格子有岛屿,先假设算4个边,判断左边和上边是否有岛屿,如果左边有岛屿,res减去2,上边同理。
solution2
如果这个格子有岛屿,只有在该格子是在岛屿边界处,就计算一条边,岛屿边界处:在数组最左边,或者左边格子没有岛屿,同理,判断上下左右四个方向的格子。
代码
solution1
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
if(grid.empty()||grid[0].empty())
{
return 0;
}
int rows=grid.size();
int cols=grid[0].size();
int len=0;
for(int row=0;row<rows;row++)
{
for(int col=0;col<cols;col++)
{
if(grid[row][col]==0) continue;
len+=4;
if(row>0&&grid[row-1][col]==1) len-=2;//上面
if(col>0&&grid[row][col-1]==1) len-=2;//左边
}
}
return len;
}
};
solution 2
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
if(grid.empty()||grid[0].empty())
{
return 0;
}
int rows=grid.size();
int cols=grid[0].size();
int len=0;
for(int row=0;row<rows;row++)
{
for(int col=0;col<cols;col++)
{
if(grid[row][col]==0) continue;
if(row==0||grid[row-1][col]==0) len++;//上
if(col==0||grid[row][col-1]==0) len++;//左
if(row==rows-1||grid[row+1][col]==0) len++;//下,这里注意数组越界
if(col==cols-1||grid[row][col+1]==0) len++;//右
}
}
return len;
}
};
问题
Leetcode463. Island Perimeter的更多相关文章
- Leetcode-463 Island Perimeter
#463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...
- Leetcode463.Island Perimeter岛屿的周长
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地 ...
- LeetCode_463. Island Perimeter
463. Island Perimeter Easy You are given a map in form of a two-dimensional integer grid where 1 rep ...
- 【LeetCode】Island Perimeter 解题报告
[LeetCode]Island Perimeter 解题报告 [LeetCode] https://leetcode.com/problems/island-perimeter/ Total Acc ...
- 463. Island Perimeter - LeetCode
Question 463. Island Perimeter Solution 题目大意:给出一个二维数组1表示陆地0表示海,求陆地的周长 思路: 重新构造一张地图grid2即一个二维数组,比原数组大 ...
- [Swift]LeetCode463. 岛屿的周长 | Island Perimeter
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...
- [LeetCode] Island Perimeter 岛屿周长
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...
- 463. Island Perimeter
https://leetcode.com/problems/island-perimeter/ 在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长 [[0,1,0,0] ...
- LeetCode Island Perimeter
原题链接在这里:https://leetcode.com/problems/island-perimeter/ 题目: You are given a map in form of a two-dim ...
随机推荐
- [转]Passing data between pages in JQuery Mobile mobile.changePage
本文转自:http://ramkulkarni.com/blog/passing-data-between-pages-in-jquery-mobile/ I am working on a JQue ...
- Murano Weekly Meeting 2015.09.08
Meeting time: 2015.September.8th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting su ...
- 封装RateLimiter 令牌桶算法
自定义注解封装RateLimiter.实例: @RequestMapping("/myOrder") @ExtRateLimiter(value = 10.0, timeOut = ...
- IA-32e模式下的异常处理
系统异常处理 CPU如果调用系统异常处理程序 需要的数据结构 IDT_Table: 中断向量表, 在中断向量表中的每一项都是一个中断描述符(中断门或者陷阱门), 一个中断描述符中的几位是段选择符 GD ...
- oracle简单命令
1.cmd 中 sqlplus /nolog 2.SQL> conn sys/password as sysdba
- Asp.Net Mvc: 应用BindAttribute
环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 ----------------------------------------------------- ...
- [转]C#利用委托跨线程更新UI数据
在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面,一般情况下,我们往往需要获得线程的一些信息来确定线程的状态.比较好的方式是用委托实现, ...
- Java—字符串
字符串 在java中,字符串被作为String类型的对象处理.String类位于java.lang包中,默认情况下,该包被自动导入所有的程序. 创建String对象的方法: String s1 = & ...
- Vue.js-创建Vue项目(Vue项目初始化)并不是用Webstrom创建,只是用Webstrom打开
我犯的错误:作为vue小白,并不知道还要单独去创建初始的vue项目,于是自己在webstrom中建了一个Empty Project, 在其中新增了一个js文件,就开始import Vue from “ ...
- 笨办法学Python(九)
习题 9: 打印,打印,打印 # Here's some new strange stuff, remember type it exactly. days = "Mon Tue Wed T ...