Leetcode 605. 種花問題(終於解決)
阿新 • • 發佈:2022-05-31
假設有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。
給你一個整數陣列 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; } };