思路:贪心算法。从左往右遍历,可以种花需要满足三个条件:
1、自己位置是0。
2、自己在最左边或者左边位置是0。
3、自己在最右边或者右边位置为0。
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
if (n == 0) return true; //针对n == 0的特殊情况
for (int i = 0; i < flowerbed.size(); i++) {
if (flowerbed[i] == 0 && (i == 0 || flowerbed[i - 1] == 0) && (i == flowerbed.size() - 1 || flowerbed[i + 1 ] == 0)) {
n--;
flowerbed[i] = 1;
}
if (n == 0) return true;
}
return false;
}
};
注意:需要考虑n == 0的特殊情况,直接返回true。否则进入循环后将会返回false。