leetcode 605 Can Place Flowers

題目詳情

Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.
Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.

將一個由0,1組成的數組想象成一行花圃,值爲1表明當前位置已經種植了花,值爲0表示未種植。爲了保證花朵的養分,不能在相鄰的地方種植花朵。題目輸入一個數組和一個n值,求當前花圃可否種植下n朵花,能夠的話返回true,不能夠則返回false。數組

Example 1:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: True
Example 2:
Input: flowerbed = [1,0,0,0,1], n = 2
Output: Falsecode

思路

  • 大致思路就是判斷當前位置先後的元素是否都爲0,若是都爲0,則知足種植條件,找出符合條件的位置有幾個就能夠。
  • 須要注意的是特殊狀況的考慮,如第一個元素和最後一個元素只有一個相鄰元素。

解法

public boolean canPlaceFlowers(int[] flowerbed, int n) {
        int count = 0;
        for(int i=0;i<flowerbed.length && count < n;i++){
            if(flowerbed[i] == 0){
                int prev = (i == 0) ? 0 : flowerbed[i-1];
                int next = (i == flowerbed.length-1) ? 0 : flowerbed[i+1];
                if(prev == 0 && next == 0){
                    flowerbed[i] = 1;
                    count ++;
                    
                }
            }
        }
        
        return count == n;
    }
相關文章
相關標籤/搜索