链接
题意
给定一个二维数组,模拟海和岛。其中0表示海域,1表示岛屿(全部相连)。求这块岛屿的周长。
已知条件:
- 每一个小格子边长为1
- 岛屿中没有内陆湖,说形象点就是岛屿是“实心”的
- 数组一维和二维的长度相等(即正方形)
- 长宽不超过100
- 数组外全是海域
思路
遍历数组,遇到海域则跳过,遇到陆地则根据它的上下左右判断是否有海岸。
代码
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.