【力扣】面試05.03:翻轉數位

題目描述

給定一個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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章