Skip to content

Latest commit

 

History

History
53 lines (41 loc) · 1.71 KB

463._Island_Perimeter.md

File metadata and controls

53 lines (41 loc) · 1.71 KB

463. Island Perimeter

难度: Easy

刷题内容

原题连接

内容描述

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:

解题方案

思路 1

class Solution(object):
    def islandPerimeter(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        h = len(grid)
        w = len(grid[0]) if h else 0
        res = 0
        # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2
        for i in range(h):
            for j in range(w):
                if grid[i][j] == 1:
                    res += 4
                    # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了
                    if i > 0 and grid[i-1][j]:
                        res -= 2
                    if j > 0 and grid[i][j-1]:
                        res -= 2
        return res