LeetCode:868. Binary Gap - Python

问题描述:

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))

欢迎指正哦。

猜你喜欢

转载自blog.csdn.net/xx_123_1_rj/article/details/81146344