LeetCode463

本题注意点:关键还是怎么求周长,我用的“求和”思想 ,即把周长分为如下两部分:

      ① 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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值