难度: 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