题目连结:605. Can Place Flowers
题目主题:Array, Greedy
昨天介绍了 Greedy 的基本概念,今天会在练习一题以 Greedy 当主题的题目,建议还没看过 Greedy 可以先回 Day 23:1974. Minimum Time to Type Word Using Special Typewriter 看看简单说说 Greedy。
建议可以看看LeetCode原本的题目说明,这边是用我的方式说明题目,参考就好。
题目会给你一个 flowerbed 花圃,我们要在这里面种植,这个 flowerbed 中 0 代表没有种植、1 代表有种植,另外会给一个 n 代表要种植的数量,目的是确认 flowerbed 中还能不能再种植 n 朵花,若可以回传 True,不行则回 False。
约束:
范例1
输入: flowerbed = [1,0,0,0,1], n = 1
输出: true
解说: flowerbed中间还可以再插一朵花,n 刚好是 1,因此这个范例回 true。
范例2
输入: flowerbed = [1,0,0,0,1], n = 2
输出: false
解说: flowerbed中间只能再插一朵花,因为花不能靠在一起,n 还有两朵花,因此这个范例回 false。
建议到这边先停下来,尝试自己解解看,若没有想法可再继续走下去。
范例:flowerbed = [0, 0, 1, 0, 0, 1, 0, 0], n = 2
上图这个例子中,可以先看 step1 ~ step2,从 step1 开始走,当目前位置没有种花时,会将花种下去,并且往前两步,也因目前点种下花,以条件来说下一个点必为空,所以可以看到 step2 的 count 已经 -1 了,并且前进了两步。
step3 因为当下的位置已经有花了,100 中 1 的旁边不能种花,也是直接往前走两步。step4 比较特别,虽然当下的位置没有花,但是因为下一个位置有花不能在这边种花,所以直接前进了三步,原因是 0100 中 1 的旁边都不能种花了,所以可以确定直接往前三步没问题。
step4 前进了三步走到最後的位置後,因为当下的位置是 0 ,所以在这边把最後一朵花种下去,最後 step5 的 count 已经是 0 了,最後这个范例是成功可以把花种完的。
若因为没想法而走到这边,建议看完想像以後再给自己一次机会试一次。
class Solution:
def planting(self, count, flowerbed, index = 0):
# 若把花全部种完回 True
if count == 0: return True
# 若花圃都走过一次还没种完回 False
if index >= len(flowerbed): return False
# 若现在位置有花 前进两步
if flowerbed[index] == 1:
return self.planting(count, flowerbed, index+2)
# 若现在位置+1有花 前进三步
if (index+1 < len(flowerbed)) and flowerbed[index+1] == 1:
return self.planting(count, flowerbed, index+3)
# 若现在位置没花 种1朵花 前进两步
if flowerbed[index] == 0:
flowerbed[index] = 1
return self.planting(count - 1, flowerbed, index+2)
def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
return self.planting(n, flowerbed)
若内容有什麽问题或建议欢迎一起交流:)
感谢您今天愿意花时间看完这篇文章~~~~
Next:53. Maximum Subarray
<<: 【Day 23】- 想用个人的帐号在 Discord 自动留言? 爬虫能做到!(实战 Selenium 在 Discord 文字频道内留言)
>>: 【day23】存local端 帐号 (SharedPreferences)
今天是铁人赛完赛日,写一写心得吧! 老实讲自己能够完赛是真的蛮意外的,虽然一开始说是临时起意,但那也...
去年(2018)通过CISSP考试後,觉得CISSP在 资讯安全治理 及 风险管理 的领域谈得不够...
今天想要分享的是这个, 记得我当时看到这个效果的时候觉得真的是炫炮过头了, 马上整个影片看完做练习,...
渗透测试流程 与客户进行签约,取得合法的测试权限後,以下为签约与接洽需要注意: 企业是否了解渗透测...
Formatting Context 所有的HTML元素,在CSS里都可以视为box(盒子),在No...