463. Island Perimeter

链接

463. Island Perimeter

题意

给定一个二维数组,模拟海和岛。其中0表示海域,1表示岛屿(全部相连)。求这块岛屿的周长。
已知条件:

  1. 每一个小格子边长为1
  2. 岛屿中没有内陆湖,说形象点就是岛屿是“实心”的
  3. 数组一维和二维的长度相等(即正方形)
  4. 长宽不超过100
  5. 数组外全是海域

思路

遍历数组,遇到海域则跳过,遇到陆地则根据它的上下左右判断是否有海岸。

代码

Java:

public class Solution {
     public static int islandPerimeter(int[][] grid) {
        int ans = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                // 遇到海跳过
                if (grid[i][j] == 0) continue;
                // 陆地,统计四个方向
                // 上,如果是第一行则直接加1,其他方向类似
                if (i == 0 || grid[i - 1][j] == 0) ans++;
                // 下
                if (i == grid.length - 1 || grid[i + 1][j] == 0) ans++;
                // 左
                if (j == 0 || grid[i][j - 1] == 0) ans++;
                // 右
                if (j == grid[i].length - 1 || grid[i][j + 1] == 0) ans++;
            }
        }
        return ans;
    }
}

效率

Your runtime beats 33.53% of java submissions.

posted @ 2017-03-17 15:38  zyoung  阅读(125)  评论(0编辑  收藏  举报