【发布时间】:2014-04-12 05:37:05
【问题描述】:
我试图弄清楚如何修改子集和问题的代码,以便在它最终返回 True 时打印出它找到的值。我当前的实现以递归方式工作并利用记忆,但我不知道如何改变它以存储并最终返回达到所需总和的路径。
我已经尝试放弃它的递归性并改用迭代,但我不知道如何在我的 for 循环中布置代码以处理我们不使用下一个值的情况以及何时使用我们确实使用它。
注意:在这个实现中,值只能使用一次,不确定原始“子集和”问题是否强制执行...
def subsetSum(tot, vals, mem={}):
key = (tot, len(vals))
if key not in mem:
if tot == 0:
mem[key] = True
return True
if tot < 0 or len(vals) == 0:
mem[key] = False
return False
return subsetSum(tot, vals[:-1], mem) or
subsetSum(tot-vals[-1], vals[:-1], mem)
else:
return mem[key]
任何关于如何转换它的帮助或提示将不胜感激。我这样做是为了为即将到来的面试做练习。
【问题讨论】:
标签: python recursion iteration memoization subset-sum