您当前的位置: 首页 >  leetcode

孑渡

暂无认证

  • 3浏览

    0关注

    178博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Leetcode】每日一题:二进制间距

孑渡 发布时间:2022-04-24 12:27:05 ,浏览量:3

二进制间距

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。 如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-gap 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

AC代码
class Solution:
    def binaryGap(self, n: int) -> int:
        s = bin(n)[2:]
        maxl = 0
        flag = 0
        temp = 0
        for l in s:
            if l == '0' and flag == 1:
                temp += 1
            elif l == '1' and flag == 0:
                flag = 1
                temp = 1
            elif l == '1' and flag == 1:
                if temp > maxl : 
                    maxl = temp
                temp = 1        
        return maxl
官方代码
class Solution:
    def binaryGap(self, n: int) -> int:
        last, ans, i = -1, 0, 0
        while n:
            if n & 1:
                if last != -1:
                    ans = max(ans, i - last)
                last = i
            n >>= 1
            i += 1
        return ans

# 作者:LeetCode-Solution

1、bin可以得到十进制数的二进制字符串,不过要注意最开始的地方有0b 2、使用位运算相当于可以减少O(log2(n))的空间复杂度 3、直接记录索引位置之差是个很好的选择,是两个思路,解题的时候有想到,只是两者之间并没有明显优劣,因此无妨。

关注
打赏
1663211900
查看更多评论
立即登录/注册

微信扫码登录

0.0519s