class Solution { public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { int size = flowerbed.size(); vector<int> buffer; int buffer_num = 0; int count = 0; bool flag = true; if(size>1){ if (flowerbed.at(0) == 0 && flowerbed.at(1) == 0) { count++; flowerbed[0] = 1; } if (flowerbed.at(size-1) == 0 && flowerbed.at(size - 2) == 0) { count++; flowerbed[size - 1] = 1; } for (int i = 1; i < size-1; i++) { if (flowerbed.at(i) == 0 && flowerbed.at(i-1)==0 && flowerbed.at(i+1)==0) { count++; flowerbed[i] = 1; } }} else { if(flowerbed[0]==0) count =1; else count=0; } if (count >= n) return true; else return false; } };
思路就是先判断开头和结尾的地方是不是两个连续的0,然后判断每连续的三个数的关系,如果三个连续的0那么就可以放一个,放完之后把这个地方放1。
网上提供的参开的代码如下:
class Solution { public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { flowerbed.insert(flowerbed.begin(),0); flowerbed.push_back(0); for(int i = 1; i < flowerbed.size()-1; ++i) { if(flowerbed[i-1] + flowerbed[i] + flowerbed[i+1] == 0) { --n; ++i; } } return n <=0; } }; 他的做法也是判断三个连续的0,但是他在开头和结尾都加上了一个0,每次放完一个之后,他不是把这个地方放1,而是往前加一个。