【发布时间】:2015-09-11 21:51:00
【问题描述】:
写一个函数 answer(str_S) ,给定 base-10 字符串 整数 S 的表示,返回最大的 n 使得 R(n) = S. 以 base-10 表示形式将答案作为字符串返回。如果有 没有这样的 n,返回“无”。 S 将是一个不大于的正整数 超过 10^25。
其中 R(n) 是时间 n 时的僵尸数量:
R(0) = 1
R(1) = 1
R(2) = 2
R(2n) = R(n) + R(n + 1) + n (for n > 1)
R(2n + 1) = R(n - 1) + R(n) + 1 (for n >= 1)
Test cases
==========
Inputs:
(string) str_S = "7"
Output:
(string) "4"
Inputs:
(string) str_S = "100"
Output:
(string) "None"
我下面的程序是正确的,但它不可扩展,因为这里 S 的范围可以是一个非常大的数字,例如 10^24。任何人都可以帮助我提出一些建议以进一步改进代码,以便它可以涵盖任何输入案例。
def answer(str_S):
d = {0: 1, 1: 1, 2: 2}
str_S = int(str_S)
i = 1
while True:
if i > 1:
d[i*2] = d[i] + d[i+1] + i
if d[i*2] == str_S:
return i*2
elif d[i*2] > str_S:
return None
if i>=1:
d[i*2+1] = d[i-1] + d[i] + 1
if d[i*2+1] == str_S:
return i*2 + 1
elif d[i*2+1] > str_S:
return None
i += 1
print answer('7')
【问题讨论】:
标签: python memory out-of-memory scalability space-complexity