1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n)
{
if (!n) return true; // 如果需要种植的花为 0,直接返回 true。
int res = 0; // 已种植的花数。
for (int i = 0; i < flowerbed.size(); ++i)
{
if (flowerbed[i]) // 当前位置已经种植了花,跳过。
continue;
int j = i;
// 找到连续空地的终点。
while (j < flowerbed.size() && flowerbed[j] == 0)
++j;
// 计算连续空地的长度。
int k = j - i - 1;
// 边界处理:如果在开头或结尾,空地长度增加 1。
if (!i)
k += 1;
if (j == flowerbed.size())
k += 1;
// 根据种植规则计算可以种植的花数。
res += k / 2;
// 如果累计种植的花数已达到或超过 n,返回 true。
if (res >= n)
return true;
// 跳过当前检查的空地段。
i = j;
}
// 如果遍历结束仍未满足 n,返回 false。
return false;
}
};
|