种花问题

假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。
可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数  n  。
能否在不打破种植规则的情况下种入  n  朵花?能则返回True,不能则返回False。
示例  1:
        输入:  flowerbed  =  [1,0,0,0,1],  n  =  1
        输出:  True
示例  2:
        输入:  flowerbed  =  [1,0,0,0,1],  n  =  2
        输出:  False
注意:
        数组内已种好的花不会违反种植规则。
        输入的数组长度范围为  [1,  20000]。
        n  是非负整数,且不会超过输入数组的大小。

自我解答:

        python  击败95%。
        如  1001,  2个0,  可种数是0
            10001,  3个0,可种数是1,
            100001,4个0,  可种数依然是  1
        所以,假设两朵花之间间隔  m  个  0,  则  可种数为  (m-1)  //  2
        只要遍历列表,计算出所有可种数,最后再判断  要种数  <=  所有可种数  就可以了
        这是目前唯一一道胜过官方题解的题,哈哈,  开心

class Solution2:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        last, length = -2, len(flowerbed)
        for i in range(0, length):
            if flowerbed[i]:
                zero_num = i - last - 1
                pnum = (zero_num - 1) // 2
                n -= pnum
                last = i
        zero_num = length - last
        n -= (zero_num - 1) // 2
        return n <= 0

原题链接:https://leetcode-cn.com/problems/can-place-flowers