Leetcode[605]:种花问题(填补思想)

题目:
在这里插入图片描述
思路:
很容易想到只要符合[0,0,0]即花的左右两边都不可以种花就是可以的,但是却也存在几个特例,即[0,0,1]、[1,0,0]、[0]、[0,0]、[1,0]……这几种特殊情况。如果对这些特例分开讨论,一是代码复杂度高,二是很难覆盖所有的特殊情形。但这些特例都有一个共同点,就是包含的元素过少,左右两边不能兼顾,这时候“填补思想”就可以就完美解决了,就是在原数组的左右两边各补一个0。

代码

import numpy as np

class Solution:
    def canPlaceFlowers(self, flowerbed, n):
        num = 0
        flowerbed = [0] + flowerbed
        flowerbed = flowerbed + [0]
        for i in range(1,len(flowerbed) - 1):
            if flowerbed[i-1] == flowerbed[i] == flowerbed[i+1]:
                num += 1
                flowerbed[i] = 1
        if num >= n:
            return True
        else:
            return False

if __name__ == '__main__':
    #flowers = [np.random.randint(0,2) for i in range(6)]
    #flowers = [1,0,0,0,1]
    #flowers = [0,0,1,0,1]
    flowers = [0,0,1,0,0]
    print('flowers = ',flowers)
    print('n = ')
    n = int(input())
    w = Solution()
    res = w.canPlaceFlowers(flowers, n)
    print('result = ',res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值