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,同志们,山水有相逢,加了个油!