LeetCode刷题记录8——605. Can Place Flowers(easy)
目录
LeetCode刷题记录8——605. Can Place Flowers(easy)
题目
题目说给定一个数组,数组中只有0或1,1代表此处种了花,0代表此处空闲不种花。种花的规则是相邻之间不能种花,只能隔一下种一个。给定一个整数n,代表这个数组还能种多少多花,如果能种的下n朵,就返回true;否则返回false。
语言
Java、C++(算法用的一模一样,只是换了一种语言)
思路
整体思路:遍历整个数组,发现能种花的地方,用count累加计数。
大体先分两种情况:
-
如果n=0,那么肯定返回true,因为种0朵当然能种下。
-
当n不为0时:
-
如果数组长度为0,则返回false
-
如果数组长度为1,并且这个值为1,返回false;否则返回true
-
如果数组长度大于1:
-
考虑开头:i=0,如果下标为0和1的值均不为1,则count++,并且值置为1
-
考虑结尾:i=length-1,如果下标length-1和length-2的值均不为1,count++,并且值置为1
-
剩余情况:当这个值不为1,且前一个和后一个均不为1时,count++,并且值置为1
-
最终将count与输入的n对比,如果count>=n,则返回true;否则返回false。
-
源码
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
if(n==0)
return true;
else {
int count=0;
if(flowerbed.length==0) return false;
else if(flowerbed.length==1) {
if(flowerbed[0]==1) return false;
else return true;
}
else {
for(int i=0;i<flowerbed.length;i++) {
if(i==0)
if(flowerbed[i]!=1&&flowerbed[i+1]!=1) {
count++;
flowerbed[i]=1;
}
if(i==flowerbed.length-1)
if(flowerbed[i-1]!=1&&flowerbed[i]!=1) {
count++;
flowerbed[i]=1;
}
if(i!=0&&i!=flowerbed.length-1) {
if(flowerbed[i]!=1&&flowerbed[i-1]!=1&&flowerbed[i+1]!=1) {
count++;
flowerbed[i]=1;
}
}
}
if(count>=n)
return true;
else
return false;
}
}
}
}
后记
其实做这题的主要是要看懂题目中的adjacent 是啥意思,这是相邻的意思,如果这个理解错了,后面就凉凉。