目錄
一、題目內容
二、解題思路
三、**
假設有乙個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。給你乙個整數陣列 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.每次看當前的位置是否有花,沒有就的話再看看是不是最後乙個位置或者當前位置的下乙個是否也沒有花,滿足的話就種花,否則看下乙個位置。注意,每次迴圈隔乙個看乙個;
2.兩端加0然後只要連續出現三個0就在中間位置種花;
最後判斷剩下的花的數量是否小於等於0即可。
class solution:
def canplaceflowers1(self, flowerbed: list, n: int) -> bool:
i = 0
while i < len(flowerbed):
if flowerbed[i] == 0:
if i == len(flowerbed) - 1 or flowerbed[i + 1] == 0:
n -= 1
else:
i += 1
i += 2
return n <= 0
def canplaceflowers2(self, flowerbed: list, n: int) -> bool:
tmp = [0] + flowerbed + [0]
for i in range(1, len(tmp) - 1):
if tmp[i - 1] == 0 and tmp[i] == 0 and tmp[i + 1] == 0:
tmp[i] = 1
n -= 1
return n <= 0
if __name__ == '__main__':
flowerbed = [0, 0, 1, 0, 1]
n = 1
s = solution()
ans1 = s.canplaceflowers1(flowerbed, n)
print(ans1)
ans2 = s.canplaceflowers2(flowerbed, n)
print(ans2)
Leetcode 605 種花問題
假設你有乙個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。給定乙個花壇 表示為乙個陣列包含0和1,其中0表示沒種植花,1表示種植了花 和乙個數n。能否在不打破種植規則的情況下種入n朵花?能則返回true,不能則返回false。示例 1...
LeetCode 605 種花問題
假設你有乙個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。給定乙個花壇 表示為乙個陣列包含0和1,其中0表示沒種植花,1表示種植了花 和乙個數 n 能否在不打破種植規則的情況下種入 n 朵花?能則返回true,不能則返回false。示...
LeetCode 605 種花問題
假設你有乙個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。給定乙個花壇 表示為乙個陣列包含0和1,其中0表示沒種植花,1表示種植了花 和乙個數 n 能否在不打破種植規則的情況下種入 n 朵花?能則返回true,不能則返回false。解...