首页 > 其他 > 详细

463. 岛屿的周长『简单』

时间:2020-05-21 22:27:12      阅读:45      评论:0      收藏:0      [点我收藏+]

题目来源于力扣(LeetCode

一、题目

463. 岛屿的周长

题目相关标签:哈希表

技术分享图片

二、解题思路

  1. 遍历数组,对于数组中为 1 的元素,直接加上全部的 4 条边,即周长为 4

  2. 在出现元素 1 的基础上,再判断其左边(即前一位元素)与其上面(即前一数组的相同索引)的元素是否也等于 1

  3. 其相邻元素也相等 1 时,需要进行减边的操作

  4. 两个陆地的相邻时,需要在两个周长为 4 的结果中再减 2,因为相邻的两个陆地的两条邻接线是不需要的,即不计算其周长

三、代码实现

public static int islandPerimeter(int[][] grid) {
    // 排除特殊情况
    if (grid == null || grid.length == 0) {
        return 0;
    }
    // 记录周长,即多少条边
    int count = 0;
    // 遍历二维数组
    for (int i = 0; i < grid.length; i++) {
        int[] arr = grid[0];
        for (int j = 0; j < arr.length; j++) {
            // 元素为 1 时,说明为一个“陆地”
            if (grid[i][j] == 1) {
                // 一块陆地最多有 4 个边,即周长为 4
                count += 4;
                // 同水平线上左边有 “陆地” 时,减两条边:格子自身的左侧边和左边格子的右侧边
                if (i > 0 && grid[i - 1][j] == 1) {
                    count -= 2;
                }
                // 同垂直线上上面有 “陆地” 时,减两条边:格子自身的上侧边和上面格子的下面边
                if (j > 0 && grid[i][j - 1] == 1) {
                    count -= 2;
                }
            }
        }
    }
    return count;
}

四、执行用时

技术分享图片

五、部分测试用例

public static void main(String[] args) {
    int[][] grid = {{0, 1, 0, 0},
                    {1, 1, 1, 0},
                    {0, 1, 0, 0},
                    {1, 1, 0, 0}};  // output:16
    int result = islandPerimeter(grid);
    System.out.println(result);
}

463. 岛屿的周长『简单』

原文:https://www.cnblogs.com/zhiyin1209/p/12933859.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!