正整数N中的二进制间隙是指在N的二进制表示中两端都被1包围的任何最大的连续零序列。
例如,数字9的二进制表示为1001,包含一个长度为2的二进制间隙。 数字529的二进制表示为1000010001,包含两个二进制间隙:一个长度为4,一个长度为3。
def iteration(n):
binary = {} # 创建空的字典
a = n # 创建商寄存器,用来存储整除2后的商值
r = 0
# 用来迭代出数n的二进制格式
while a//2 > 0:
binary[r] = a % 2
a = a//2
r += 1
binary[r] = a
z = sorted(binary.items(), reverse=True) # 格式转换为了列表
z = tuple(z) # 将列表转换为元组
# 计算间隙
x = 0 # 1位置计数
y = 0 # 长度计数
for i in range(len(z)):
if (z[i][1] == 1) & (i != 0):
if (i-x > 1) & (i-x-1 > y):
y = i-x-1
x = i
return y
总结:
在编写过程中遇到了关于列表,元组和字典间的转换问题,在弄明白三者间的区别后,难度就没有那么大了。关于三者的定义与区别,我总结在了这篇文章里:
https://blog.csdn.net/weixin_45907952/article/details/129146682?spm=1001.2014.3001.5501
我的主要编程逻辑为:
寻找第二个1所在的位置(因为第一个1一定存在于第一位);
判断是否大于上一个间隙的长度,如果是则更新长度计数器。
要加油学习!