zoukankan      html  css  js  c++  java
  • LeetCode 463. Island Perimeter岛屿的周长 (C++)

    题目:

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

    Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells).

    The island doesn't have "lakes" (water inside that isn't connected to the water around the island). One cell is a square with side length 1. The grid is rectangular, width and height don't exceed 100. Determine the perimeter of the island.

    Example:

    Input:
    [[0,1,0,0],
     [1,1,1,0],
     [0,1,0,0],
     [1,1,0,0]]
    
    Output: 16
    
    Explanation: The perimeter is the 16 yellow stripes in the image below:
    
    

    分析:

    给定一个二维数组,其中1表示岛屿,0表示水域,求所有岛屿的周长和。

    这道题的关键也就是求出相邻岛屿,因为我们很好统计矩阵中1的个数,乘4再减去相邻岛屿重合的边就可以得到解。

    在计算的时候我们可以发现一条重合的边,实际上是属于两个岛屿的,所以计算时要乘2,所以计算一个陆地周围是否有重合的边的时候,我们可以只计算上方和左边的两个方向,可以节省一定的时间。

    程序:

    class Solution {
    public:
        int islandPerimeter(vector<vector<int>>& grid) {
            int res = 0;
            for(int i = 0; i < grid.size(); ++i)
                for(int j = 0; j < grid[0].size(); ++j){
                    if(grid[i][j]){
                        res += 4;
                        if(i != 0 && grid[i-1][j])
                            res -= 2;
                        if(j != 0 && grid[i][j-1])
                            res -= 2;
                    }
                }
            return res;
        }
    };
  • 相关阅读:
    工作总结
    JSON数据使用
    DataTable知识
    树形结构菜单
    区域树前后台
    跨域总结
    工作一年感想
    项目整体架构分析
    springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:
    go函数、方法、接口笔记
  • 原文地址:https://www.cnblogs.com/silentteller/p/10743459.html
Copyright © 2011-2022 走看看