463.Island Perimeter 求岛的周长

       这里写图片描述

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

一、基本思想

  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;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的数组了`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值