这种实现方式只用到了三个变量:**previousFib**, currentFib, 和临时变量 **newFib**。与 n 的大小无关,因此是常数空间复杂度 O(1)。
这是一种非常空间效率高的实现方式,因为它不需要额外的空间来存储序列的中间值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import time deffib(n): pre = 0 cur = 1 if n<= 1: return n for _ inrange(n-1): new = pre + cur pre = cur cur = new return cur t1 = time.time() t = fib(38) t2 = time.time() print('结果:%s, 运行时间:%s'%(t, t2-t1))
defks(n,c): if n==0or c ==0: result = 0 elif w[n] > c: result = ks(n-1,c) else: tmp1 = ks(n-1,c) tmp2 = v[n] + ks(n-1,c-w[n]) result = max(tmp1,tmp2) return result