Leetcode 之 IslandPerimeter

来源:互联网 发布:淘宝无法开店 编辑:程序博客网 时间:2024/05/16 19:29

问题描述:
这里写图片描述

思路: 按道理每个实心格子会贡献4条边长,但是如果格子周围如果有别的实心格子,就会少贡献一条,最坏的情况是四周都被包围,就贡献0边长。所以总边长=SumOver_i(实心格子i*4-实心格子i周围实心格子数量)

代码如下:
其中使用了((i-1<0)?0:1*grid[i-1][j])保证遍历时不超出边界

import java.util.HashMap;public class IslandPerimeter {    public int islandPerimeter(int[][] grid) {        HashMap<Integer,int[]>h=new HashMap<Integer,int[]>();        int[]temp;        int sum=0;        int idx=0,nextNum=0,m=grid.length,n=grid[0].length;        for(int i=0;i<m;i++){            for(int j=0;j<n;j++){                nextNum=((i-1<0)?0:1*grid[i-1][j])+                ((j-1<0)?0:1*grid[i][j-1])+((j+1>n-1)?0:grid[i][j+1])+                ((i+1>m-1)?0:grid[i+1][j]);                temp=new int[2];                temp[0]=grid[i][j];                temp[1]=nextNum;                h.put(idx,temp);                idx++;            }        }        for(int i:h.keySet()){            if(h.get(i)[0]==1)                sum+=h.get(i)[0]*4-h.get(i)[1];        }        return sum;    }    public static void main(String[]args){        IslandPerimeter c=new IslandPerimeter();        int[][]grid={{1},{0}};//      ={{0,1,0,0},//               {1,1,1,0},//               {0,1,0,0},//               {1,1,0,0}};        System.out.println(c.islandPerimeter(grid));    }}
0 0