5473. 燈泡開關 iv
難度中等1收藏分享切換為英文關注反饋
房間中有n
個燈泡,編號從0
到n-1
,自左向右排成一行。最開始的時候,所有的燈泡都是關著的。
請你設法使得燈泡的開關狀態和target
描述的狀態一致,其中target[i]
等於1
第i
個燈泡是開著的,等於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麼,那麼對應的就是再...