题目给出如上图所示的示例。
一、基本思想
- 检查所给数据中的所有数,若为1,则在边数(初始为0)上加4;
- 检查重复的边,这些边即为两块方形的重叠部分,不能算作岛的周长。
- 要考虑到不一定给出的是N*N的数据,所以要定义两个整型数m和n分别表示大小
代码部分如下所示:
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int m,n;
m=grid.size();
n=grid[0].size();
if(m==0) return 0;
int edge,dul;
edge=0;
dul=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]==1){
edge+=4;
if(i!=0){
if(grid[i-1][j]==1)
dul++;
}
if(i!=m-1){
if(grid[i+1][j]==1)
dul++;
}
if(j!=0){
if(grid[i][j-1]==1)
dul++;
}
if(j!=n-1){
if(grid[i][j+1]==1)
dul++;
}
}
}
}
return edge-dul;
}
};
二、用到的知识点
vector提供了operation[]函数,可以像数组一样操作,可以进行边界检查、动态改变大小。本题主要利用了vector来代替二位的数组:
vector<vector><int> >array2(3)
vector< vector<int> > array(3);
for(int i=0;i<3;i++)
array[i].resize(3);//设置数组的大小3X3
array.resize(5);
arry[3].resize(3);
arry[4].resize(3);//现在是5X3的数组了`