力扣(leetcode) 463. 岛屿的周长 (几何应用 ) (numpy应用)

题目在这:https://leetcode-cn.com/problems/island-perimeter/

思路分析:

在这里插入图片描述
这张图是二维数组
[
[0,1,0,0]
[1,1,1,0]
[0,1,0,0]
[1,1,0,0]
]
组成的。

要求周长,实际上可以发现,每个一维数组中,存在一对相邻的1的时候,就有两条边消失, 竖向同理。

所以我们设在横向和竖向共有X对相邻的1。则 消失的边为, X * 2 条。
设二维数组中共有Y个1,即周长为 Y * 4
所以该岛屿的周长为 Y * 4-X * 2

在计算竖向相邻的1的时候,我们可以使用numpy,将二维矩阵转置一下,这样就又变成求横向相邻的1了。

完整代码
边测试边写的,代码比较冗余,懒得弄了~凑合看。

class Solution:
    def islandPerimeter(self, grid: List[List[int]]) -> int:
        import numpy as np

        def A(grid,res,temp): # 该函数用于求相邻的1的个数。
            for i in grid: # 当前i为一维数组
                for j in range(len(i)-1):
                    if i[j] ==1 and i[j+1] == 1:
                        temp +=1
                res += temp * 2
                temp = 0
            return res

        if __name__ == '__main__':
            temp = 0 # 记录过程中连续的1
            res = 0 # 记录结果周长
            print(grid)
            ans = A(grid,res,temp) # 横向
            #转置
            print("第一个ans",ans)
            f = np.array(grid)
            f = f.T
            grid = f.tolist()

            ans += A(grid,res,temp)
            print("ans",ans)
            # res 是被磨灭的边
            msg = 0
            for i in grid:
                for j in i:
                    if j == 1:
                        msg +=1
            print("mas",msg)
            print("res",res)
            ans = msg * 4 - ans
            print(ans)
            return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值