LeetCode算法题-Island Perimeter(Java实现)
这是悦乐书的第238次更新,第251篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第105题(顺位题号是463)。您将获得一个二维整数网格形式的地图,其中1代表土地,0代表水。网格单元水平/垂直(不是对角线)连接。 网格完全被水包围,并且恰好有一个岛(即,一个或多个连接的陆地小区)。
岛上没有“湖泊”(里面的水与岛周围的水没有联系)。 一个单元格是边长为1的正方形。网格为矩形,宽度和高度不超过100。确定岛的周长。
输入:[[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出:16
说明:周边是下图中的16条黄色条纹:

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
此题的题意是要求我们根据提供的二维数组,来计算二维数组中元素为1(代表边长为1的正方形)所组成图形的周长。
计算周长,一是需要知道该图形由多少个小正方形(元素为1)组成,二是减去相邻小正方形之间重叠的两边。我们直接使用两层循环,在内层循环中,如果当前元素值为1,表示遇到了正方形,周长就加4,此时我们就需要判断其右边和下边有没有挨着的正方形,如果有就要减去2,最后返回周长。
public int islandPerimeter(int[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int perimeter = 0;
for (int i=0; i<grid.length; i++) {
for (int j=0; j<grid[0].length; j++) {
if (grid[i][j] == 1) {
perimeter += 4;
// 向右判断,有重叠就减去2
if (j+1 < grid[i].length && grid[i][j+1] == 1) {
perimeter -= 2;
}
// 向下判断,有重叠就减去2
if (i+1 < grid.length && grid[i+1][j] == 1) {
perimeter -= 2;
}
}
}
}
return perimeter;
}
03 第二种解法
同样使用两层循环,当某一元素值为1的时候,我们去判断它的上下左右是不是等于0,从而计算它单独的边,即没有与其他正方形连接的边,也就是题目示例中,所给图例中标黄的线。
public int islandPerimeter2(int[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int perimeter = 0, len = grid.length, len2 = grid[0].length;
for (int i=0; i<len; i++) {
for (int j=0; j<len2; j++) {
if (grid[i][j] == 1) {
if (i == 0 || grid[i-1][j] == 0) {
perimeter++;
}
if (i == len-1 || grid[i+1][j] == 0) {
perimeter++;
}
if (j == 0 || grid[i][j-1] == 0) {
perimeter++;
}
if (j == len2-1 || grid[i][j+1] == 0) {
perimeter++;
}
}
}
}
return perimeter;
}
04 小结
算法专题目前已日更超过三个月,算法题文章105+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Island Perimeter(Java实现)的更多相关文章
- LeetCode算法题-Heaters(Java实现)
这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...
- LeetCode算法题-Sqrt(Java实现)
这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...
- leetcode算法:Island Perimeter
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
随机推荐
- scala转换date提取年月日时分秒
从数据库提取出来的时间为 String 格式,现在需要转换为 date 并提取出里面的 小时 时间段: import java.text.SimpleDateFormat import java.ut ...
- 5.jQuery
简介 jQuery是一个快速.简洁的JavaScript框架,jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代 ...
- 《HelloGitHub月刊》第 10 期
前言 这一年感谢大家的支持,小弟这里给大家拜年了! <HelloGitHub月刊>会一直做下去,欢迎大家加入进来提供更多的好的项目. 最后,祝愿大家:鸡年大吉- <HelloGitH ...
- UPC:ABS
问题 G: ABS 时间限制: 1 Sec 内存限制: 128 MB提交: 537 解决: 186[提交] [状态] [讨论版] [命题人:admin] 题目描述 We have a deck c ...
- Python:Selenium 1:浏览器驱动
Selenium是一个用于测试网站的自动化测试工具,爬虫中也经常用到,支持各种浏览器包括Chrome.Firefox.Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器. 自Web ...
- 预测python数据分析师的工资
前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取(https://www.cnblogs.com/lyuzt/p/10636501.html)和对获取的数据进行可视化分析(http ...
- ASP.NET MVC5多语言切换快速实现方案
功能 实现动态切换语言,Demo做了三种语言库可以切换,包括资源文件的定义,实体对象属性设置,后台代码Controller,IAuthorizationFilter,HtmlHelper的实现,做法比 ...
- Linux万能快捷键与命令
tab键:补全命令 \ :命令折行写 Ctrl+C :结束命令 --help :查看命令详细信息 man :类似于help 比help更加详细. sudo :临时以管理员权限执行命令. 还有吗?
- [MySQL] 5.7版本以上group by语句报1055错误问题
1. 在5.7版本以上mysql中使用group by语句进行分组时, 如果select的字段 , 不是完全对应的group by后面的字段 , 有其他字段 , 那么就会报这个错误 ERROR 105 ...
- STM32-FreeRTOS快速学习之总结1
1. 基础知识注意:在RTOS中是优先值越高则优先级越高(和ucos/linux的相反) 在移植的时候,主要裁剪FreeRTOS/Source/portable文件夹,该文件夹用来针对不同MCU做的一 ...