先在前后各插入0,这样可以保证flowerbed的长度大于等于3,然后从第2个到倒数第2个元素循环判断最近邻3元组是否都是0,是则在中间的0上插花。
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
int m = flowerbed.size();
if (n == 0) {
return true;
}
flowerbed.insert(flowerbed.begin(), 0);
flowerbed.push_back(0);
for (int i = 1; i <= m; i++) {
if (flowerbed[i] == 0) {
if (flowerbed[i-1] == 0 && flowerbed[i+1] == 0) {
flowerbed[i] = 1;
if (--n == 0) {
return true;
}
}
}
}
return n == 0;
}
};