本文介绍: 的二进制表示中连续的”1″之间最大间隔。中”1″的数量,如果数量小于等于1,则意味着在二进制表示中只有一个“1”,因此返回0。在 22 的二进制表示中,有三个 1,组成两对相邻的 1。在 8 的二进制表示中没有相邻两个 1,所以返回 0。第一对相邻的 1 中,两个 1 之间距离为 2。第二对相邻的 1 中,两个 1 之间距离为 1。中”1″的数量大于1,使用列表推导找到进制字符串。,用于存储进制表示中所有”1″的索引位置。中所有”1″的索引位置,并将它们存储列表

1.题目

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

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

示例 1:

输入n = 22
输出2
解释22 的二进制是 "10110" 。
在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。
第一对相邻的 1 中,两个 1 之间的距离为 2 。
第二对相邻的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。

示例 2:

输入n = 8
输出0
解释8 的二进制是 "1000" 。
在 8 的二进制表示中没有相邻的两个 1,所以返回 0 。

示例 3:

输入n = 5
输出2
解释:5 的二进制是 "101" 。

提示

  • 1 <= n <= 109

 

2.解析

这个方法作用找到给定整数n的二进制表示中连续的”1″之间的最大间隔。如果整数包含一个“1”,则返回0;否则,返回最大间隔。

首先,将整数n转换为二进制字符串然后使用切片[2:]去掉前两个字符(‘0b‘),得到纯二进制字符串s
然后初始化一个列表ls用于存储二进制表示中所有”1″的索引位置。

统计二进制字符s中”1″的数量,如果数量小于等于1,则意味着在二进制表示中只有一个“1”,因此返回0。
如果二进制字符s中”1″的数量大于1,使用列表推导找到二进制字符s中所有”1″的索引位置,并将它们存储在列表ls中。
初始化变量max_d为0,用于存储最大间隔。遍历列表ls中的所有元素计算当前元素和下一个元素之间的间隔,并存储变量d中。如果当前间隔d大于之前的最大间隔max_d,则更新max_d当前间隔。否则,保持不变。
最后,返回最大间隔作为结果

 

3.python代码

class Solution:
    def binaryGap(self, n: int) -> int:
        s=bin(n)[2:]
        ls=[]
        if s.count("1")<=1:
            return 0
        else:
            ls=[i for i in range(len(s)) if s[i]=="1"]
            max_d=0
            for i in range(len(ls)-1):
                d=ls[i + 1] - ls[i]
                max_d=d if d>max_d else max_d

            return max_d

 

4.运行结果

 

原文地址:https://blog.csdn.net/Python_1981/article/details/134740198

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45184.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注