我的力扣算法463-岛屿的周长

ok
我又来了
在这里插入图片描述
看题:
在这里插入图片描述
在这里插入图片描述
针不戳,针不戳,简单题针不戳;
难题我痛哭流泪,简单题我重拳出击。
不说了,开整。
首先,读一下题,算岛屿周长,就是把二维数组抽象成方格,一个“1”就是一个方格有四条边,如果相邻两个方格,会有一条边重合且不显示出来,4+4-2=6,周长就变成6了,而且题目说这个海域还就只有一个岛屿,这让这道题变得更加简单了。
在这里插入图片描述

我们先理清一个数学逻辑,本来一个“1”有4的长度,如果它旁边有其他的“1”,那么这两个“1”的长度是不是都要减去重合且不显示的边,所以只要有两个方格相邻那就4+4-2,如果有三个“1”相邻,那么两两方格会相邻,那就是4+4+4-2-2=8,长度就变成8了,就是这个逻辑。
来人,上代码!

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int res=0;//这个用来计数
        int m=grid.size();//这个用来存放高度也就是行
        int n=grid[0].size();//这个用来存放宽度,也就是列
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                   if (grid[i][j]) {
				    res += 4;//一个“1”就是4条边
				    if (i + 1 < m && grid[i + 1][j]) {
				    //首先判断是否越界,没有的话,
				    // 看下一行是不是“1”,是的话,两个相邻减去2条边
					res -= 2;
				    }
				    if (j + 1 < n && grid[i][j + 1]) {
				    //首先判断是否越界,没有的话, 
				    //看下一个=列是不是“1”,是的话,两个相邻减去2条边
					res -= 2;
				    }
			    }
            }
        }
        return res;//返回计数值
    }
};

ok,同志们,山水有相逢,加了个油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值