**

Leetcode刷题 463题:岛屿的周长(基于Java语言)

**
一、 题目描述:

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。

网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

示例 :

输入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]

输出: 16

解释: 它的周长是下面图片中的 16 个黄色的边:


二、 解题思路:

  对于这道题,我们首先需要明白的一点是,我如何去找到整个图中的为岛屿(即1)的格子呢,这是比较关键的地方,解决这个方面的主要的思路是:通过循环遍历整个图,找到为1的格子就行,我们只需要将用一个二位数组来表示整个图,然后通过两个循环找到为1的格子,也就是岛屿;当找到为1的格子后,我们这个时候就需要去判断一下这个格子的上下左右的格子是否为海(即为0)或者是在边界外,如果这个格子的上下左右的格子是海(0)或者在这个图的外边,则可以在记录周长的ans上加1,从而完成对岛屿的周长的计算。

三、 Java程序:

class Solution {//这两个数组的作用分别是用来找到某个格子的周围的格子,然后通过周围的格子来进行判断是否为水域,如果是水域,则将这条边的贡献加入答案ans中。static int[] dx = {0, 1, 0, -1};static int[] dy = {1, 0, -1, 0};public int islandPerimeter(int[][] grid) {//n代表的是数组的行数,m代表的是数组的列数int n = grid.length, m = grid[0].length;int ans = 0;//遍历每一个陆地的格子,看其四个方向是否为边界或者水域//如果是,将这条边的贡献(即1)加入答案ans中即可。for(int i =0; i<n; ++i){for(int j = 0; j<m; ++j){if(grid[i][j] == 1){int cnt = 0;for (int k = 0; k<4; ++k){int tx = i + dx[k];int ty = j + dy[k];if(tx<0 || tx >= n || ty < 0 || ty >= m || grid[tx][ty] == 0){//这个if语句主要是想先找到整个图的周围的格子,是通过tx<0 || tx >= n || ty < 0 || ty >= m 来判断的//里面的格子的判断主要是通过 grid[tx][ty] == 0来判断的cnt += 1;}}ans += cnt;}}}return ans;}
}

Leetcode刷题 463题:岛屿的周长(基于Java语言)相关推荐

  1. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  2. LeetCode(463)——岛屿的周长(JavaScript)

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

  3. leetcode 463. 岛屿的周长(Java版)

    题目 https://leetcode-cn.com/problems/island-perimeter/ 题解 思路 需要三次遍历 首先,总边数=陆地个数*4 然后,横向遍历棋盘,纵向遍历棋盘,如果 ...

  4. Java每次输入一个字符+高精度取整计算(记洛谷P2394题WA+TLE+RE的经历,Java语言描述)

    祝大家圣诞节快乐 卑微菜鸡深夜写博客~~~55555 其实这题真的有毒 这题你要是C/C++,虽然语法不是辣么直接,但几行而已: #include<bits/stdc++.h>using ...

  5. java语言程序设计教程课后题答案魏永红_《Java语言程序设计教程》习题参考答案...

    1 / 23 < Java 语 言 程 序 设 计 教 程 > 习 题 参 考 答 案 第 1 章 习题参考答案 一.选择题 1 . B 2 . D 3 . C 4 . B 5 . A 6 ...

  6. java程序填空题输出汤姆猫_《Java语言程序设计(新)》地大模拟

    <Java语言程序设计(新)>地大模拟 2020-08-29 08:08:08 635 有学员问关于<Java语言程序设计(新)>地大模拟的题目的参考答案和解析,具体如下: & ...

  7. java语言程序设计教程课后题答案魏永红_《Java语言程序设计基础教程》习题解答...

    1 . Java 运行平台包括三个版本,请选择正确的三项: ( ) A. J2EEB. J2ME C. J2SE D. J2E 解答: A , B , C 2 . Java JDK 中反编译工具是: ...

  8. 用好String、String[]和char[]真香(洛谷P1179题题解,Java语言描述)

    题目要求 P1179题链接 思路 思路一: 既然是Java嘛,就nextLine()读入,用split()切成String[],再把每一个String用toCharArray()变成char[],根据 ...

  9. 力扣(LeetCode)官网首发!史上首本Java语言实现LeetCode题解手册

    最近小编无聊刷力扣(LeetCode)的时候看到了很多LeetCode都是用c++写的,就萌生了想给小伙伴分享一份用Java语言来实现的LeetCode题解答案: 今天就把这件事给安排了吧,分享几个用 ...

最新文章

  1. 左神算法基础班3_13深度拷贝含有随机指针的链表
  2. optee的RPC流程的代码详解
  3. jquery: 一些常见的获取
  4. LayaBox IDE 安装后执行项目报错解决方案的一些记录
  5. 一个好用的Visual Studio Code扩展 - Live Server,适用于前端小工具开发
  6. Cyclone II FPGA系列简介(备忘)
  7. 夸克浏览器怎么安装脚本_iOS 第一浏览器发布安卓版,除了真香我还能说什么...
  8. mysql谓词演算_MySQL基础知识
  9. win7无法连接打印机拒绝访问_如何解决局域网无法访问SQL Server 2008 无法连接到(local)...
  10. Spring----JmsTemplate
  11. [BZOJ3566][SHOI2014]概率充电器
  12. java web 断点上传_使用WebUploader实现分片断点上传文件功能(二)
  13. VIM 下工程的管理工具
  14. 源码分析三:OkHttp(2)—拦截器简介
  15. linux 定时器 库,linux 定时器
  16. 完美解决win10家庭版本系统无法远程连接问题
  17. walking机器人入门教程-应用-全景图
  18. CUE 文件及其格式说明
  19. 【转载】mysql语句写作顺序以及执行顺序
  20. File.separator用法

热门文章

  1. JAVA 反射知识点总汇
  2. Jvm 系列(七):Jvm 调优-工具篇
  3. python中的正则表达式语法_Python基础教程之正则表达式基本语法以及re模块
  4. Python的零基础超详细讲解(第六天)-Python的数字类
  5. 常用的 分布式事务 都有哪些?我该用哪个?
  6. 清华学霸一天面试6家大厂-offer拿来吧你
  7. 专业介绍Linux中的进程管理
  8. centos 8 卸载anaconda_Centos7安装JDK1.8
  9. java转义字符_Java入门 - 语言基础 - 13.Character类
  10. python相关函数_python常用函数精讲