寻找最大的二进制缺口

时间:2020-05-28 17:55:12

标签: python

我必须找到整数的二进制间隔。

正整数N内的二进制间隙是连续零的任何最大序列,在N的二进制表示形式中,两端均被1包围。

例如:N = 1041 二进制:10000010001 结果:5(5个零,并用1包围)

下面是我的代码,尽管bin_no [22]为1,但是它从不进入if语句。

def solution(N):
    bin_no = f'{N:32b}'
    print(len(bin_no))
    count = []

    for i in range(len(bin_no)):
        if bin_no[i] == 1:
            count[i] = 0
            j=i
            while(bin_no[j+1] != 1):
                count[i] +=1
                j +=1
            print (count[i])

print(solution(529))

5 个答案:

答案 0 :(得分:1)

使用正则表达式:

def solution(N):
    bin_no = f'{N:b}'
    pt= r"10+(?=1)"
    mtchs = re. findall(pt, bin_no)
    print(bin_no)
    print(mtchs)
    mx = max(mtchs,key=len)
    return mx.count('0')

print(solution(401))

输出:

110010001

['100','1000']

3

答案 1 :(得分:1)

简单快速

def solution(N):
    binary = bin(N)[2:].strip("0").split("1")
    return max(len(x) for x in binary)

答案 2 :(得分:1)

我有一个 Java 解决方案。

class BinaryGap {
    public static void main (String args[])
    {
        BinaryGap binaryGap = new BinaryGap();
        int n = 261;
        System.out.println("Max count : "+binaryGap.binaryValue(n));
    }
    
    public int binaryValue(int N) {
        String binaryValue = Integer.toBinaryString(N);
        System.out.println("binaryValue : "+binaryValue);
        int maxZeroCount = 0;
        int zeroCount = 0;
        for (int i = 0, n = binaryValue.length(); i < n; i++) {
            if(binaryValue.charAt(i) == '0') {
                ++zeroCount;
            } else {
                if(zeroCount > maxZeroCount) {
                    maxZeroCount = zeroCount;
                }
                zeroCount = 0;
            }
        }
        return maxZeroCount;
    }
}

答案 3 :(得分:1)

这是另一个有效的解决方案。希望它可以帮助你。你只需要在函数中传递任何数字,它就会返回最长的二进制间隙。

def Solution(num):

n = int(num/2)
bin_arr = []

for i in range(0,n):
    if i == 0:
        n1 = int(num/2)
        bin_arr.append(num%2)
    else:
        bin_arr.append(n1%2)
        n1 = int(n1/2)

        if n1 == 0:
            break

print(bin_arr)
result = ""
count = 0
count_arr = []

for i in bin_arr:
    if result == "found":
        if i == 0:
            count += 1
        else:
            if count > 0:
                count_arr.append(count)
                count = 0
    if i == 1:
        result = 'found'
    else:
        pass

if len(count_arr) == 0:
    return 0
else:
    return max(count_arr)

print(LongestBinaryGap(1130))  # Here you can pass any number.

答案 4 :(得分:0)

您可以用'1'分割零并获得零组作为列表。找到最长的并完成!

def solution(N):
    bin = f'{N:b}'  # for 32-bit representation with leading zeroes use f'{N:#032b}'
    splitted = bin.split('1')
    m = max(splitted, key=len)
    return len(m)

它是这样的:

1041 -> '10000010001' -> ['', '00000', '000', ''] -> '00000' -> 5

在这种情况下,可以轻松更改代码以忽略开头和结尾的零组。

相关问题