LeetCode | 463. Island Perimeter 寻找像素点边缘简单题

You are given a map in form of a two-dimensional integer gridwhere 1 represents land and 0 represents water. Grid cells are connectedhorizontally/vertically (not diagonally). The grid is completely surrounded bywater, and there is exactly one island (i.e., one or more connected landcells). The island doesn't have "lakes" (water inside that isn'tconnected to the water around the island). One cell is a square with sidelength 1. The grid is rectangular, width and height don't exceed 100. Determinethe perimeter of the island.

Example:

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

这题我原来考虑的是对于每个1,判断左右上下是0的格子的个数,这样无疑时间挺长的,后来看到了一个很好的方法,就是每发现一个值为1的格子,将边界数加4,然后没发现他与一个值为1的格子重合,边界数减2,这样就能够得到最后的边界数

这一题还可以改进,就是使用两个值a和b来分别统计格子总数和边界重合的总数,最后return a*4-2*b就能得到最后的结果,这一种方法比上面的好一倍以上我觉得是因为其使用的是++,而上一种使用的是+=4,-=2,++应该比+=4,+=2等要好很多,以后能使用++的地方尽量使用++!

通过这一题我还学会了假如使用格子把一个四连同区域完全包围起来,共需要多少个格子的方法,方法和上面的方法类似

class Solution {
public:
   int islandPerimeter(vector<vector<int>>& grid) {
	int r = grid.size();
	int c = grid[0].size();
	int count = 0;
	for(int i=0;i<r;i++)
		for (int j = 0; j < c; j++)
		{
			if (grid[i][j] == 1)
			{
				count += 4;
				if (i > 0 && grid[i - 1][j] == 1) count -= 2;
				if (j > 0 && grid[i][j - 1] == 1) count -= 2;
			}
		}
	return count;
}
};


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值