我很乐意得到一些帮助。
我有以下问题:
我得到了一个数字列表seq
和一个目标数字,我需要写两件事:
True
如果子序列的总和等于目标数,则返回递归解决方案,False
否则返回。例子:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
其次,我需要使用我在上一个解决方案中编写的内容编写一个解决方案,但现在使用一个字典,其中键是元组:
(len(seq),target)
对于 1 号,这是我到目前为止所做的:
def subset_sum(seq, target):
if target == 0:
return True
if seq[0] == target:
return True
if len(seq) > 1:
return subset_sum(seq[1:],target-seq[0]) or subset_sum(seq[1:],target)
return False
不确定我做对了,所以如果我能得到一些意见,我将不胜感激。
对于 2 号:
def subset_sum_mem(seq, target, mem=None ):
if not mem:
mem = {}
key=(len(seq),target)
if key not in mem:
if target == 0 or seq[0]==target:
mem[key] = True
if len(seq)>1:
mem[key] = subset_sum_mem(seq[1:],target-seq[0],mem) or subset_sum_mem(seq[1:],target,mem)
mem[key] = False
return mem[key]
我无法获得记忆来给我正确的答案,所以我很高兴在这里得到一些指导。
感谢任何愿意提供帮助的人!