LeetCode刷题记录8——605. Can Place Flowers(easy)

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累加计数。

大体先分两种情况:

  1. 如果n=0,那么肯定返回true,因为种0朵当然能种下。

  2. 当n不为0时:

    1. 如果数组长度为0,则返回false

    2. 如果数组长度为1,并且这个值为1,返回false;否则返回true

    3. 如果数组长度大于1:

      1. 考虑开头:i=0,如果下标为0和1的值均不为1,则count++,并且值置为1

      2. 考虑结尾:i=length-1,如果下标length-1和length-2的值均不为1,count++,并且值置为1

      3. 剩余情况:当这个值不为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 是啥意思,这是相邻的意思,如果这个理解错了,后面就凉凉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值