1138. 能否放置花

1138. 能否放置花

中文English

假设你有一个长花圃,其中有些地块已经被种植了,但是有些地块没有。但是,花不能够在相邻的地块下种植 - 他们会争夺水从而导致两者的死亡。

给定一个花圃(用一个包含0和1的数组来表示,其中0代表空,1代表非空),和一个数字n,返回n朵新的花在这个花圃上以能否在不违反“无相邻花”的规则种植。

样例

样例1

输入: flowerbed = [1,0,0,0,1], n = 1
输出: True

样例2

输入: flowerbed = [1,0,0,0,1], n = 2
输出: False

注意事项

  1. 输入数组不会违反“无相邻花”规则。
  2. 数组数组的大小在[1, 20000]内。
  3. n是一个不会超过输入数组大小的非负的整数。
class Solution:
    """
    @param flowerbed: an array
    @param n: an Integer
    @return: if n new flowers can be planted in it without violating the no-adjacent-flowers rule
    """
    '''
    大致思路:
    1.分两种情况
    当前为1的话,那么跳过,下一位必须为0,也跳过
    当前为0的话,那么判断下一位是否为1,如果为1,跳过。否则赋值1
    2.初始化count,如果count次数==n的时候,说明是可以放置那么多花的,返回True,否则False
    '''
    def canPlaceFlowers(self,flowerbed, n):
        if n == 0 or (flowerbed == [0] and n == 1):
            return True
        count = 0
        flag = True
        for i in range(len(flowerbed)-1):
            if flowerbed[i] == 0:
                if flag == False:
                    flag = True
                    continue
                elif flag == True:
                    if flowerbed[i+1] == 0:
                        ##直接赋值,不赋值也可以
                        flowerbed[i] = 1
                        count += 1
                        flag = False
                        if count == n:
                            return True
            else:
                flag = False
        return False
原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12684796.html