LeetCode 605.Can Place Flowers

LeetCode 605.Can Place Flowers_第1张图片


class Solution {
public:
    bool canPlaceFlowers(vector& flowerbed, int n)
{
	int size = flowerbed.size();
	vector 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& 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,而是往前加一个。

你可能感兴趣的:(LeetCode,算法,C++)