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;
        }
    };
  • 相关阅读:
    ASP.NET MVC 以Stream 下载文件
    ITextSharp 初次接触
    Easyui中tree组件实现搜索定位功能及展开节点定位
    lodop 打印控件的使用
    XML IList<T> TO DataSet TO DataTable 相互转换
    JSONToObejct 问题 part 1
    可以动态添加图片的轮播插件
    防止机器注册
    sqlServer 取每组的前几条数据
    log4net 动态设定日志文件名
  • 原文地址:https://www.cnblogs.com/silentteller/p/10743459.html
Copyright © 2011-2022 走看看