本题注意点:关键还是怎么求周长,我用的“求和”思想 ,即把周长分为如下两部分:
① 0、1交界处;
② 1与矩阵边界交界处。
还可以用“作差”思想,即每个1先算4次,再减去1、1交界的情况*2。
import numpy as np
def islandPerimeter(grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
M = len(grid)
N = len(grid[0])
ans = sum(grid[i][j] != grid[i][j+1] for i in range(M) for j in range(N-1))
ans += sum(grid[i][j] != grid[i+1][j] for i in range(M-1) for j in range(N))
for i in range(N):
if grid[0][i] == 1: ans += 1
if grid[M-1][i] == 1: ans += 1
for i in range(M):
if grid[i][0] == 1: ans += 1
if grid[i][N-1] == 1: ans += 1
return ans
# sample:
grid = [[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
print(islandPerimeter(grid))