zoukankan      html  css  js  c++  java
  • 【leetcode】 463. Island Perimeter

    题目: 以二维数组形式表示坐标岛屿,求边长。

    例子: 

    [[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:
    

    思路:    一开始想用最笨的办法,就是两次for循环遍历所有元素,如果为1(1为岛屿),就分别判断 上、下、左、右 是否为岛屿,若不是则 边数+1 。

              第二次换了想法, 每一条横向 如果有岛屿,只要连续,那么左右两边和始终为2,如果不连续,则左右两边和 +2。  纵向判断 上下边 也是如此。

       所用tag记录上一格是否为岛屿 来判断是否连续,如果为连续,则这一横排的 左右边和 始终为2, 如果有一个不连续,则左右边和 +2 。 

         横向判断用两次for循环,纵向判断也用两次for循环。第二层循环之前要把 tag清空,否则上一行的最后一格 和 下一行的第一格 会误判。

       

       效率一般,更好的没想起来- -

     1 public class Solution {
     2     public int islandPerimeter(int[][] grid) {
     3         int m = 0,tag = 0; //m记录边数 ,tag作为标记 记录是否为连续岛屿
     4         int rows = grid.length;   
     5         int columns = grid[0].length;
     6         for(int i = 0;i < rows;i++){   //横向遍历
     7             tag = 0 ;   //下层循环 标记清零
     8             for(int j = 0; j < columns; j++){
     9                 if(grid[i][j] == 1){
    10                     if(tag == 1){
    11                         continue;
    12                     }
    13                     m = m + 2;
    14                     tag = 1;
    15                 }
    16                 else{
    17                     tag = 0;
    18                 }
    19             }
    20         }
    21         for(int j = 0; j < columns; j++){  //纵向遍历
    22             tag = 0; //下层循环  标记清零
    23             for(int i = 0;i < rows;i++){
    24                 if(grid[i][j] == 1){
    25                     if(tag == 1){
    26                         continue;
    27                     }
    28                     m = m + 2;
    29                     tag = 1;
    30                 }
    31                 else{
    32                     tag = 0;
    33                 }
    34             }
    35         }
    36         
    37         return m;
    38     }
    39 }
  • 相关阅读:
    vue中插槽的理解
    父子组件的通信
    vue3.0怎么禁用eslint校验代码和修改端口号
    三大排序
    让机器人实现自主行走 没你想的那么难
    国内外知名激光雷达公司盘点
    激光雷达寿命短,思岚通过什么技术来解决?
    浅谈SLAM的回环检测技术
    除了ROS, 机器人定位导航还有其他方案吗?
    思岚科技即将登陆“2018日本机器人周”精彩抢先看
  • 原文地址:https://www.cnblogs.com/magicya/p/6681143.html
Copyright © 2011-2022 走看看