欢迎光临散文网 会员登陆 & 注册

Leetcode Day18 1

2022-04-24 16:43 作者:我喜欢喝一点点  | 我要投稿

868. 二进制间距

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。


如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。


我的第一反应是lowbit。。就这么写了,感觉绕了一大圈

class Solution:

    def binaryGap(self, n: int) -> int:

        def lowbit(n):

            return n&(-n)

        def getN(a):

            tmp=0

            while a!=1:

                a=a//2

                tmp+=1

            return tmp

        res=[]

        while n:

            lowb=lowbit(n)

            n-=lowb

            tmp=getN(lowb)

            res.append(tmp)

        max=0

        for i in range(len(res)-1):

            if abs(res[i]-res[i+1])>=max:

                max=abs(res[i]-res[i+1])

        return max

看看题解:

n&1获取最低位(和00001&可以获得最低位)

如果为0则右移,如果为1,Last更新为当前的位数,并更新ans


Leetcode Day18 1的评论 (共 条)

分享到微博请遵守国家法律