Leetcode 605. 种花问题(Java实现 超详细注释!)

Leetcode 605. 种花问题

2021第一道贪心,理清思路就不难,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!

Java实现:

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        // 其实这道题原理比较简单,题目问我们该花坛能否再种下n朵花,我们转换成贪心的思想,直接求出这个花坛中最多还能种多少花
        // 计数还能再种多少花
        int nums = 0;
        // 由于相邻的地块不能同时种花,我们这里遍历每一个地块
        for (int i = 0; i < flowerbed.length; i++){
            // 其实大方向上看就两种情况,这块地有花、这块地没花,我们分类讨论

            // 如果该地块种了花,那说明下一块地肯定不能种花,我们直接跳到下下块地,由于循环每次都会跳一块,因此我们只需要跳一块即可
            if (flowerbed[i] == 1){
                i ++;
                // 如果这块地没种花呢?由于已经经过了前面一步,此时有三种情况,第一种前面没有地块,二前面跳了一步,三前面跳了两步
                // 没有地块相当于前面没有花,跳一步说明前面一块没有花,跳两步说明前前面有花,但是前面一块没有花,总之前面就是一定没有花
                // 那么只要下一块也没有花或者已经是最后一块地块了,就可以直接在这块地种花,种了以后下一块不能种了,直接跳过i += 1;
            }else if(i == flowerbed.length - 1 || flowerbed[i + 1] == 0){
                nums ++;
                i ++;
            }
        }   
        // 最后我们看剩余可以种花的地块是否大于或等于n,是就返回true,否就返回false
        return nums >= n;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值