• 463. 岛屿的周长『简单』


    题目来源于力扣(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);
    }
    
  • 相关阅读:
    c语言学习笔记(6)——for和while循环
    c语言学习笔记(5)——进制
    c语言学习笔记(4)——流程控制
    ckeditor复制粘贴word
    java上传超大文件
    plupload上传整个文件夹
    vue+上传文件夹
    php+上传大文件
    web+文件夹上传
    2G以上的大文件如何上传
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12933859.html
Copyright © 2020-2023  润新知