LeetCode刷题(python)——868.二进制间距

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kobe_academy/article/details/88093474

题目描述:

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

如果没有两个连续的 1,返回 0 。

示例 1:

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

示例 2:

输入:5
输出:2
解释:
5 的二进制是 0b101 。

示例 3:

输入:6
输出:1
解释:
6 的二进制是 0b110 。

示例 4:

输入:8
输出:0
解释:
8 的二进制是 0b1000 。
在 8 的二进制表示中没有连续的 1,所以返回 0 

解题思路:

  先根据给定的十进制数得到对应二进制数的字符串,然后对二进制字符串进行处理

代码实现:

def binaryGap(self, N: int) -> int:
    s = ''
    max = 0 # 记录最大间距
    count = 0 # 存储临时间距
    temp = False  # 用于确定是否可以开始计数
    while N > 1 :
        s += str(N % 2)
        N = int(N/2)
    s += str(N)
    ss = s[::-1]  # ss 为得到的二进制字符串
    for i in ss:
        i = int(i) # 类型转换为数值
        if i == 0 and temp:
            count += 1
        else:
            if count > max:
                max = count # 判断当前临时间距和最大间距的关系,如果必要更新最大间距
            temp = True
            count = 1
    return max

                                                  关注我的公众号免费获取   30G   python学习资料!!!

猜你喜欢

转载自blog.csdn.net/kobe_academy/article/details/88093474