1. 程式人生 > 其它 >Leetcode 605. 種花問題(終於解決)

Leetcode 605. 種花問題(終於解決)


假設有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。

給你一個整數陣列 flowerbed 表示花壇,由若干 0 和 1 組成,其中 0 表示沒種植花,1 表示種植了花。另有一個數 n ,能否在不打破種植規則的情況下種入 n 朵花?能則返回 true ,不能則返回 false。

示例 1:

輸入:flowerbed = [1,0,0,0,1], n = 1
輸出:true
示例 2:

輸入:flowerbed = [1,0,0,0,1], n = 2
輸出:false

提示:

  • 1 <= flowerbed.length <= 2 * 104
  • flowerbed[i] 為 0 或 1
  • flowerbed 中不存在相鄰的兩朵花
  • 0 <= n <= flowerbed.length

主要思路:如果出現兩個元素相同且均為零,然後分別判斷該元素左邊和右邊是為均為1,這裡有個易錯點,一定要先判斷左邊元素是否滿足種花條件
Code:

class Solution {
public:
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        int cnt=0;
        if(flowerbed.size()==1&&flowerbed[0]==0)
        {
            if(n==1)
                return true;
        }
        for(int i=1;i<flowerbed.size();i++)
        {
            if(flowerbed[i]==flowerbed[i-1]&&(flowerbed[i]==0))
            {
                
                //先判斷左邊是否滿足條件
                if((i-2)<0)
                {
                    flowerbed[i-1]=1;
                    cnt++;
                    continue;
                }
                if((i-2)>=0&&flowerbed[i-2]==0)
                {
                    flowerbed[i-1]=1;
                    cnt++;
                    continue;
                }
                //再判斷左邊是否滿足條件
                if((i+1)<flowerbed.size()&&(i-1)>=0)
                {
                    if(flowerbed[i+1]==0&&flowerbed[i-1]==0)
                    {
                        flowerbed[i]=1;
                        cnt++;
                        continue;
                    }
                }
                if((i+1)>=flowerbed.size())
                {
                    flowerbed[i]=1;
                    cnt++;
                    continue;
                }
                
                
            }
        }
        if(cnt>=n)
            return true;
        
        return false;
        
        
    }
};