LeetCode:868. Binary Gap - Python

189 篇文章 3 订阅
151 篇文章 2 订阅

问题描述:

868. 二进制间距

给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1之间的最长距离。
如果没有两个连续的 1,返回 0

示例 1:
输入:22
输出:2
解释:22 的二进制是 0b10110 。在 22 的二进制表示中,有三个 1,组成两对连续的 1 。第一对连续的 1 中,两个 1 之间的距离为 2 。第二对连续的 1 中,两个 1 之间的距离为 1 。答案取两个距离之中最大的,也就是 2 。

提示: 1 <= N <= 10^9

问题分析:

先看一下题目的意思,就是两个相邻的1的距离,如果两个1之间有0的存在也归为相邻。现在看题解,首先把整数转换成2进制形式,可以使用位移运算(也可以使用Python中bin(int)直接得出2进制数)。因为相邻吗,只要求出最大间隔就可以了。

Python3实现:

class Solution:
    def binaryGap(self, N):
        res, last = 0, None  # res 保存结果, last 记录上个一个1出现的位置。
        for i in range(32):
            if (N >> i) & 1:
                if last is not None:  # 现在的 i,表示1 出现的位置
                    res = max(res, i - last)  # 更新结果
                last = i
        return res


if __name__ == '__main__':
    solu = Solution()
    print(solu.binaryGap(N=22))

欢迎指正哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值