题目
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。
示例 1:
1 | 输入:flowerbed = [1,0,0,0,1], n = 1 |
示例 2:
1 | 输入:flowerbed = [1,0,0,0,1], n = 2 |
提示:
- 1 <= flowerbed.length <= 2 * 10^4
- flowerbed[i] 为 0 或 1
- flowerbed 中的内容都满足种植规则
- 0 <= n <= flowerbed.length
题解
首先必须要找到,能够成功载重的区域必须不相邻,如0,1,0,1,两朵花之间都会间隔一个0,且只有0位上可以种植新的花。
我们可以以倒计数的方式来递减需求种花的数量,没满足一次递减1,如果最后需求数量不足0,则表示刚好可以满足载重完。在遍历的内部,每次成功种植后,我们都需要往后跳两位,因为两朵花之间不能相邻。而不能成功种植分为两种情况,一种是当前位已经是1了,位置被其他花占用了,那么这种情况我们同样需要遵循两花不能相邻的原则向后跳两位。另一种是当前位是0,但是相邻为是1,隔壁已经被栽了一朵花了,那么这个时候我们需要向后跳三位(隔壁,隔壁的相邻区,下一个判断是否可栽种的区域)。
具体过程见下面的代码注释:
1 | class Solution { |