leetcode 605.种花问题
只说注意点和处理边界问题。
题目本身很简单,只需要遍历数组即可。但是,需要注意边界的处理问题。
如果n=0,那么这个时候是不需要插进花的,所以是true;
如果花坛中的数目是0,那么就不行,返回false;
如果花坛数目是1,那么我们需要判断这一个位置中有没有花,在判断能不能放。有人会担心,如果这个时候花坛数目是1,但是n=2怎么办?题目中明确说明了,n<=花坛的数目所以这个时候n只可能是0或者1.
当我们处理花坛的最左边或者最右边的时候,我们需要注意,这里不需要判断两边,只需要判断一端即可。
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int cnt=0;
if(n==0)
return true;
if(flowerbed.length==0)
return false;
if(flowerbed.length==1){
return flowerbed[0]==1?false:true;
}
for(int i=0;i<flowerbed.length;i++){
if(flowerbed[i]==0){
if(i==0){
if(flowerbed[i+1]==0){
cnt++;
flowerbed[0]=1;
}
}
else if(i==flowerbed.length-1){
if(flowerbed[i-1]==0){
cnt++;
flowerbed[i]=1;
}
}
else{
if(flowerbed[i-1]==0&&flowerbed[i+1]==0){
cnt++;
flowerbed[i]=1;
}
}
}
}
return cnt>=n?true:false;
}
}