这是悦乐书的第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实现)的更多相关文章

  1. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  3. leetcode算法:Island Perimeter

    You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...

  4. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  5. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  6. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  7. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  8. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  9. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

随机推荐

  1. 软件工程-构建之法 小学生四则运算的出题程序,android版本

    内容中包含 base64string 图片造成字符过多,拒绝显示

  2. Apache生产配置

    httpd.conf # # This is the main Apache HTTP server configuration file. It contains the # configurati ...

  3. vue踩坑--TypeError: __WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor

    今天在使用vuex的时候遇到这么个问题,虽然后来解决了,是首字母大写的原因,但我还是不知道为什么.这里先记录下来. 这是vuex/store.js import Vue from 'vue' impo ...

  4. C++版 - 剑指offer面试题28: 字符串的排列

    题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...

  5. 将Maple输出的LaTex导出到txt文件

    将Maple输出的LaTex导出到txt文件 1. 生成LATEX Maple可以把它的表达式转换成LATEX, 使用latex命令即可: > latex(x^2+y^2=z^2); {x}^{ ...

  6. Nginx 优化静态文件访问

    简介 Web 开发中需要的静态文件有:CSS.JS.字体.图片,可以通过web框架进行访问,但是效率不是最优的. Nginx 对于处理静态文件的效率要远高于 Web 框架,因为可以使用 gzip 压缩 ...

  7. Typora中的Markdown教程

    Tutorial of markdown in Typora 工欲善其事,必先利其器 如上所说,这里给大家安利一款高BIG的利器Typora,这是一款文艺青年(装逼)必备的用于编写markdown的打 ...

  8. MariaDB Galera Cluster 部署 + keepalived实现高可用

    MariaDB Galera Cluster 部署 MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力 ...

  9. 开源库Magicodes.Storage正式发布

    说明 Magicodes.Storage,是心莱科技团队提供的统一存储库,相关库均使用.NET标准库(netstandard2.0)编写,支持.NET Framework以及.NET Core. 我们 ...

  10. 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)

    今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...