463.Island Perimeter 求岛的周长

       463.Island Perimeter 求岛的周长_第1张图片

       题目给出如上图所示的示例。

一、基本思想

  1. 检查所给数据中的所有数,若为1,则在边数(初始为0)上加4;
  2. 检查重复的边,这些边即为两块方形的重叠部分,不能算作岛的周长。
  3. 要考虑到不一定给出的是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;ifor(int j=0;jif(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 >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的数组了`

你可能感兴趣的:(C++,leetcode)