题目:
思路:
很容易想到只要符合[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)