[LeetCode] 1529. 灯泡开关 IV

119 阅读1分钟

1529. 灯泡开关 IV

Medium

思路

第一眼看到题目,感觉无从下手,只能在纸上画一画慢慢分析了

分析的出一下结论(给小伙伴提示,最好还是能自己在纸上画一画,更加直观)

  • 连续的1连续的0和一个1一个0的效果是一样的,需要开关的次数是一样的
  • 贪心思考,对于10011,首先简化来看就变成了101,贪心优先满足前面的1,第一步肯定是都开。变为111,然后关再开,具体开哪几个关哪几个,取决于后面10的位置
  • 所以的出结论,如果遇到一个不连续的1,那我们需要两次操作来满足。即10这种形式需要多两次。
  • 结尾如果是1还需要再加上一次

不知道小伙伴有没有理解,这个还是需要自己推演一遍

以上,AC!

代码

python3

class Solution:
    def minFlips(self, target: str) -> int:
      res = 0
      pre = '0'
      for i in target:
        if i == '0':
          if pre == '1':
            res += 2
        pre = i
      if pre == '1':
        res += 1
  
      return res