我必须找到整数的二进制间隔。
正整数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))
答案 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
在这种情况下,可以轻松更改代码以忽略开头和结尾的零组。