Can Place Flowers (Easy)
题目解析
题目给了我们一个数组flowerbed作为花盆,这个数组由诺干个1和0组成,1说明该位置种了植物,0说明每种,题目给出了一种规则:种花时,诺花盆里相邻的两个位置都种了花,它们会因为争抢水而死亡,所以种花时中间要留一个位置,例如[1,0,1]。题目给了我们一个变量n,代表接下来要种的花的数量,要求判断在花不会相邻的情况下能否完全把花种进给定的数组里。
思路
题目相对简单,我们只需要遍历数组,找到值为0的位置,在判断该位置的前后是否已经为1。如果是,则放弃这个位置继续寻找下一个值为0的位置;如果都不为1,则将这个位置值变为1(即种上花),然后记录一下已经种了几株花,当种下的花的数量一定等于题目给定的数量n的时候,则返回true,诺遍历完数组还没种完则返回false。
代码
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
if(n==0)return true;
int sum=0;
for(int i=0;i<flowerbed.size();i++){
if(flowerbed[i]==0){
if(i==0&&flowerbed[i+1]!=1){
sum++;
flowerbed[i]=1;
}
else if(flowerbed[i-1]!=1&&flowerbed[i+1]!=1){
sum++;
flowerbed[i]=1;
}
else if(flowerbed[i-1]!=1&&i==flowerbed.size()-1){
sum++;
flowerbed[i]=1;
}
}
if(sum==n)
return true;
}
return false;
}
结果
小结
挺简单的一道题目,细心一点就能发现题目的规律,主要是要记得判断花盆的前后,特别是第一个位置和最后一个位置,还要记得将种上的位置置为1,要多注意一些细节的地方。