题目:给一个二维数组,由0和1组成,1会组成某种形状,然后计算这个形状有多少条边,一条边就是一个一站宽度或者高度,最外面也算。大概就是这样,如果看题目的图片会更加清晰的。
思路:刚开始我一直想先把几种情况分开来,简直伤脑筋,分为几个胶,然后在边上的情况,然后一点也没接触边的情况,一分析简直伤脑筋,多次尝试后感觉脑袋发热,只好去吃个苹果透透气,吃完坐回来再分析一次感觉不对劲,这个问题其实很简单,只是我想复杂了,说到底所有的元素都有上下左右,只有根据上下左右来分析就简单的多,就拿上来分析,如果它上面已经没有了,就意味着这就是一条边,或者上面是0,那么它的上面也是一条边,其他面也是一样的分析。附上代码:
public class Solution {
public int islandPerimeter(int[][] grid) {
int result=0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]==1){
if(i==0 || grid[i-1][j]==0) result++;
if(j==grid[0].length-1 || grid[i][j+1]==0) result++;
if(i==grid.length-1 || grid[i+1][j]==0) result++;
if(j==0 || grid[i][j-1]==0) result++;
}
}
}
return result;
}
}
网友评论