題目描述
給定一個32位整數 num,你可以將一個數位從0變爲1。請編寫一個程序,找出你能夠獲得的最長的一串1的長度。
算法思路
分爲兩種狀態討論,一個是數字n的二進制形式裏沒有0,那麼最長串的長度爲二進制的長度+1
第二種情況是二進制串裏有0,那麼bin(num)[2:].split('0')
,取得所有的非0字段,只能修改一個數位,所以遍歷列表,相連兩個字段長度+1就是新字段。
class Solution:
def reverseBits(self, num: int) -> int:
num=bin(num)[2:]
if num.count('0')==0:return len(num)+1
else:
num=num.split('0')
MAX=0
for i in range(len(num)-1):
MAX=max(MAX,len(num[i]+num[i+1])+1)
return MAX
執行用時 :40 ms, 在所有 Python3 提交中擊敗了60.24%的用戶
內存消耗 :13.7 MB, 在所有 Python3 提交中擊敗了100.00%的用戶