Solution 2 – Greedy
func canPlaceFlowers(flowerbed []int, n int) bool {
if n==0 {
return true
}
max:= len(flowerbed)-1
for i:=0;i<=max;i++{
if flowerbed[i]==0{
leftEmpty := i==0 || flowerbed[i-1]==0
rightEmpty := i==max || flowerbed[i+1]==0
if leftEmpty && rightEmpty {
flowerbed[i]=1
n--
if n<1{
return true
}
}
}
}
return n<1
}

Solution 1 – messy
func canPlaceFlowers(flowerbed []int, n int) bool {
if n==0 {
return true
}
if len(flowerbed)==1 {
if flowerbed[0]!=0 {
return false
}
return true
}
if len(flowerbed)<3 {
if flowerbed[0]!=flowerbed[1]{
return false
}
if n<2{
return true
}
return false
}
if flowerbed[0]==0 && flowerbed[1]==0 {
flowerbed[0]=1
n--
}
for i:=1;i<len(flowerbed)-2;i++{
if flowerbed[i]==0 && flowerbed[i-1]==0 && flowerbed[i+1]==0{
flowerbed[i]=1
n--
}
}
if n<1{
return true
}
if n ==1 && flowerbed[len(flowerbed)-2]==0 && flowerbed[len(flowerbed)-1]==0 {
flowerbed[len(flowerbed)-1]=1
n--
return true
}
return false
}

Leave a Reply