LeetCode #605. Can Place Flowers

题目

605. Can Place Flowers


解题方法

只看数组中第一个位置,如果是1就移除一个0和一个1,这时候如果数组中只有1个数了,就break掉返回;如果是0,则看看数组中是不是只有一个数且只需要再插一个花,如果是则break掉返回True,不是则返回False,如果数组中还有很多数,则判断下一个位置是0还是1,如果是1则移除掉当前位置的0,如果是0则插花,设置当前位置为1并将待插花个数减一,然后判断是否插完即可。
时间复杂度:O(n)
空间复杂度:O(1)


代码

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        if not n:
            return True
        
        rat = False
        i = 0
        while i < len(flowerbed):
            if flowerbed[i]:
                if len(flowerbed) == 1:
                    break
                else:
                    flowerbed.remove(1)
                    flowerbed.remove(0)
            else:
                if len(flowerbed) == 1:
                    if n == 1:
                        rat = True
                    break
                elif not flowerbed[i+1]:
                    flowerbed[i] = 1
                    n -= 1
                    if not n:
                        rat = True
                        break
                else:
                    flowerbed.remove(0)
        
        return rat
posted @ 2020-11-03 10:10  老鼠司令  阅读(66)  评论(0)    收藏  举报