leetcode 5473 燈泡開關4

2021-10-08 13:27:21 字數 1803 閱讀 9129

5473. 燈泡開關 iv

難度中等1收藏分享切換為英文關注反饋

房間中有n個燈泡,編號從0n-1,自左向右排成一行。最開始的時候,所有的燈泡都是著的。

請你設法使得燈泡的開關狀態和target描述的狀態一致,其中target[i]等於1i個燈泡是開著的,等於0意味著第i個燈是關著的。

有乙個開關可以用於翻轉燈泡的狀態,翻轉操作定義如下:

翻轉時,如果燈泡的狀態為0就變為1,為1就變為0

返回達成target描述的狀態所需的最少翻轉次數。

示例 1:

輸入:target = "10111"

輸出:3

解釋:初始配置 "00000".

從第 3 個燈泡(下標為 2)開始翻轉 "00000" -> "00111"

從第 1 個燈泡(下標為 0)開始翻轉 "00111" -> "11000"

從第 2 個燈泡(下標為 1)開始翻轉 "11000" -> "10111"

至少需要翻轉 3 次才能達成 target 描述的狀態

示例 2:

輸入:target = "101"

輸出:3

解釋:"000" -> "111" -> "100" -> "101".

示例 3:

輸入:target = "00000"

輸出:0

示例 4:

輸入:target = "001011101"

輸出:5

先去掉字首0,然後去掉連續的重複子序列,剩下的燈從左到右模擬即可統計出結果。

class solution:

def minflips(self, target: str) -> int:

res = 1

f = 0

t = 0

l = len(target)

for e in target:

if e=='0':

f+=1

if f==len(target):

return 0

tmp =

for i in range(1,l):

if target[i]!=target[i-1]:

x = target[i]

#tmp = ''.join(tmp)

if tmp[0]=='0':

tmp = tmp[1:]

for e in tmp:

if e=='1':

t+=1

s = len(tmp)

if t==s:

return 1

#print(tmp)

k=1for i,e in enumerate(tmp):

if e=='0' and i+1res+=2

elif e=='0' and i==s-1:

res+=1

return res

力扣199場比賽 5473 燈泡開關 IV

房間中有 n 個燈泡,編號從 0 到 n 1 自左向右排成一行。最開始的時候,所有的燈泡都是 關 著的。請你設法使得燈泡的開關狀態和 target 描述的狀態一致,其中 target i 等於 1 第 i 個燈泡是開著的,等於 0 意味著第 i 個燈是關著的。有乙個開關可以用於翻轉燈泡的狀態,翻轉操...

Leetcode 319 燈泡開關

初始時有 n 個燈泡關閉。第 1 輪,你開啟所有的燈泡。第 2 輪,每兩個燈泡你關閉一次。第 3 輪,每三個燈泡切換一次開關 如果關閉則開啟,如果開啟則關閉 第 i 輪,每 i 個燈泡切換一次開關。對於第 n 輪,你只切換最後乙個燈泡的開關。找出 n 輪後有多少個亮著的燈泡。示例 輸入 3輸出 1解...

LeetCode(319 燈泡開關)

如題 最直觀的做法就是模擬每次開關操作,用乙個int陣列儲存狀態,每次去判斷對應的位置更改對應index的值,但是很顯然這是指數即的計算。那麼換個方向,我們就以每個位置會進行開合的次數來判斷,很顯然開合奇數次則為開啟,否則為關閉。那麼開合次數是由上面決定的,間隔n不就是對應整除n麼,那麼對應的就是再...