給定一個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。
網格中的格子水平和垂直方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有“湖”(“湖” 指水域在島嶼內部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
示例 :
輸入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
輸出: 16
解釋: 它的周長是下面圖片中的 16 個黃色的邊:
代碼
class Solution {public int islandPerimeter(int[][] grid) {int res=0;int[][] dir=new int[][]{{0,1},{1,0},{-1,0},{0,-1}};for(int i=0;i<grid.length;i++)for(int j=0;j<grid[0].length;j++){if(grid[i][j]==1)//遍歷所有島嶼res+=getLandPerimeter(grid,j,i,dir);//檢查島嶼的四周} return res;}public int getLandPerimeter(int[][] grid,int x,int y,int[][] dir) {//檢查四周int cnt=0;for(int[] c:dir){int nextX=x+c[0],nextY=y+c[1];if(nextX<0||nextX>=grid[0].length||nextY<0||nextY>=grid.length||grid[nextY][nextX]!=1)//位于邊界或者周圍的是0cnt++;}return cnt;}
}