原题地址:点我传送
看上去第一时间想的可能有些复杂,后来想到用两个数组来代表水平和垂直的线,对每一个属于小岛的格子,测试它的四周,如果是水就将与那一个相邻的那条边加入到岛边,否则就不是岛边。其实可以直接计数,但为了更好理解先用数组记录下来,最后再计数。对于类似这种问题,测试四周都是很经典的想法。
Java:
public class Solution {
public int islandPerimeter(int[][] grid) {
int n = grid.length;
int m = grid[0].length;
boolean [][]vertical = new boolean [n][m+1];
boolean [][]horizontal = new boolean [n+1][m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==1)
{
if(i-1<0||grid[i-1][j]==0) // up
{
horizontal[i][j]=true;
}
if(i+1==n||grid[i+1][j]==0) // down
{
horizontal[i+1][j]=true;
}
if(j-1<0||grid[i][j-1]==0) // left
{
vertical[i][j]=true;
}
if(j+1==m||grid[i][j+1]==0) // right
{
vertical[i][j+1]=true;
}
}
}
}
int count = 0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m+1;j++)
{
if(vertical[i][j])
count++;
}
}
for(int i=0;i<n+1;i++)
{
for(int j=0;j<m;j++)
{
if(horizontal[i][j])
count++;
}
}
return count;
}
}
岛屿周长计算
本文介绍了一种使用两个布尔数组来标记岛屿边界的方法,通过遍历矩阵确定岛屿的边界条件,并最终计算出岛屿的周长。
350

被折叠的 条评论
为什么被折叠?



