【发布时间】:2019-11-30 06:24:55
【问题描述】:
我找到了这个任务并完全坚持它的解决方案。
给出了一个由 Q 个字符组成的非空零索引字符串 S。这个字符串的周期是最小的正整数 P 使得:
P ≤ Q / 2 和 S[K] = S[K+P] 对于 0 ≤ K
例如,7 是“abracadabracadabra”的句号。如果 M 是 N 的二进制表示的周期,则正整数 M 是正整数 N 的二进制周期。
例如,1651 的二进制表示为“110011100111”。因此,它的二进制周期是5。另一方面,102没有二进制周期,因为它的二进制表示是“1100110”,它没有周期。
考虑上述场景并在 Python 中编写一个函数,该函数将接受整数 N 作为参数。给定一个正整数 N,函数返回 N 的二进制周期,如果 N 没有二进制周期,则返回 -1。
附加代码在某些输入(9、11、13、17 等)上仍然不正确。目标是找到并修复实现中的错误。最多可以修改2行。
def binary_period(n):
d = [0] * 30
l = 0
while n > 0:
d[l] = n % 2
n //= 2
l += 1
for p in range(1, 1 + l):
ok = True
for i in range(l - p):
if d[i] != d[i + p]:
ok = False
break
if ok:
return p
return -1
【问题讨论】:
-
你能提供失败的示例测试用例吗?
-
@venkatakrishnan 例如 9 是“1001”。但函数返回 3
标签: python python-3.x binary