给定一个数N,该函数应将该数转换为二进制形式,计算连续零的个数(二进制间隔),并返回最大二进制间隔。例如,9 = 1001,长度为2的二进制间隔。数字529 = 1000010001,有2个长度分别为4和3的二进制间隔。如果数字有2个或更多的二进制间隔,函数应返回最大二进制间隙,即在N = 529的情况下为4。
我试过这个功能:
def solution(N):
binaryN = bin(N)[2:]
n = len(binaryN)
binaryGap = []
for i in range(n):
if binaryN[i] == 0 and binaryN[i + 1] == 0:
m = len(binaryN)
else:
return 0
binaryGap = binaryGap.append(m)
return max(binaryGap)
这个函数对所有的N值都返回0,这是不正确的。我如何调试/改进代码以产生准确的结果?
2条答案
按热度按时间epggiuax1#
看看下面的代码,它可以解决你的问题。
代码是不言自明的,但让我知道在任何疑问的情况下。
g6ll5ycj2#
这里有几个问题值得一提,以帮助你。(首先要注意的是,在Python中,推荐/最佳实践是对变量名使用全部小写,所以我将在下面的例子中替换它们。)
bin()函数返回一个字符串,所以你应该检查是否等于“0”(或“0”),而不是整数。
在Python中,你不需要检查字符串(或任何其他可迭代对象)的长度,以便在类似这样的场景中在for循环中使用。例如,你可以替换:
用更“Python”的方式
然后你可以使用变量
bit
(当然你可以随意称呼它,记住好的变量名会使代码更可读)来代替binary_number[index]
,在这种情况下,对于for循环的每一次迭代,bit都会被binary_number字符串中的下一个字符替换。从这里开始在代码中:
将始终是相同的值,即字符串
binaryN
的总长度。例如,4表示“1001”。)这不是您想要的。代码
return 0
的else块中的第一条语句将立即终止函数并返回0,因此binaryGap = binaryGap.append(m)代码将永远不会执行,因为它是不可访问的,因为前面的返回停止了该套件中代码的任何进一步执行。你已经有了正确的想法,并朝着正确的方向前进,但我不认为你的代码,即使上面的问题得到纠正,将匹配所有可能遇到的二进制数。所以,另一个可能的替代方案(但大致坚持的解决方案,我认为你自己心目中)将是这样的东西,我希望能帮助你: