题目描述
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。
算法思路
class Solution(object):
def canPlaceFlowers(self, flowerbed, n):
"""
:type flowerbed: List[int]
:type n: int
:rtype: bool
"""
if n==0:return True
if len(flowerbed)==1:
if flowerbed[0]==0 :return True
return False
for i in range(len(flowerbed)):
if i==0 and flowerbed[i]==0 and flowerbed[i+1]==0:
flowerbed[i]=1
n-=1
elif i==len(flowerbed)-1 and flowerbed[i]==0 and flowerbed[i-1]==0:
flowerbed[i]=1
n-=1
elif flowerbed[i-1]==0 and flowerbed[i]==0 and flowerbed[i+1]==0:
flowerbed[i]=1
n-=1
if n==0:return True
return False
执行用时 :156 ms, 在所有 Python 提交中击败了86.03%的用户
内存消耗 :12.8 MB, 在所有 Python 提交中击败了5.88%的用户
if n==0:return True
if len(flowerbed)==1:
if flowerbed[0]==0 :return True
return False
for i in range(len(flowerbed)):
if i==0 and flowerbed[i]==0 and flowerbed[i+1]==0 or i==len(flowerbed)-1 and flowerbed[i]==0 and flowerbed[i-1]==0 or flowerbed[i-1]==0 and flowerbed[i]==0 and flowerbed[i+1]==0:
flowerbed[i]=1
n-=1
if n==0:return True
return False
方法2
ans, count = 0, 1
for i in range(len(flowerbed)):
if not flowerbed[i]:
count += 1
else:
ans += (count - 1)//2
count = 0
if count:
ans += count//2
return ans >= n
计算整个flowerbed可以再植入多少花,最后和n进行大小比较。
说起来,因为ans表示位置,所以还可以根据排列组合计算植花的方式。