Leetcode 463(Java)

Total Accepted: 35307
Total Submissions: 62217
Difficulty: Easy
Contributors:
amankaraj
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells). The island doesn’t have “lakes” (water inside that isn’t connected to the water around the island). One cell is a square with side length 1. The grid is rectangular, width and height don’t exceed 100. Determine the perimeter of the island.

Example:

[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]

Answer: 16
Explanation: The perimeter is the 16 yellow stripes in the image below:
Leetcode 463(Java)_第1张图片

AC后突然感觉自己的方法有点笨,无奈今天事情太多了,等回过神会想想更优解再更新。我的思路是从分别上下左右面映射下来数能看见的边,能使得周长能+1,不仅要本块是陆地,还要求从映射方向的前一块不是陆地,大致思路就是这样,AC代码如下有注释:

    public int islandPerimeter(int[][] grid) {
        int result = 0;
        for(int i =0;i<grid.length;i++){
            for(int j=0;j<(grid[i].length);j++){
                if(j==0 && (grid[i][j]==1))result++;
                if(i==0 && (grid[i][j]==1))result++;
                if(i==grid.length-1 && (grid[i][j]==1))result++;
                if(j==grid[i].length-1 && (grid[i][j]==1))result++;
                if(i!=0 && grid[i][j]==1 && grid[i-1][j]==0)result++;//上面映射
                if(j!=0 && grid[i][j]==1 && grid[i][j-1]==0)result++;//左面映射
                if(i!=grid.length-1 && grid[i][j]==1 && grid[i+1][j]==0)result++;//下面映射
                if(j!=grid[i].length-1 && grid[i][j]==1 && grid[i][j+1]==0)result++;//右面映射
            }
        }
        return result;
    }

你可能感兴趣的:(leetcode)