You need to enable JavaScript to run this app. 动态规划howSum的Python记忆化实现为何效率与暴力解法一致?
优惠活动
大模型
产品
解决方案
定价
更多

动态规划howSum的Python记忆化实现为何效率与暴力解法一致?

问题原因

你的记忆化缓存完全没有生效,核心原因是递归调用时没有传递memo参数:
当前代码中只有最外层调用会初始化memo字典,后续每一层递归调用都没有传入已经缓存了计算结果的memo对象,每次子递归都会重新生成全新的空memo,之前已经计算过的目标和结果完全没有被复用。当测试300的用例时,递归树会完全展开,运行效率和暴力解法一致。

修正方案

  • 调整递归调用语句,补传memo参数:将remainderResult = howSum(remainder, nums)修改为remainderResult = howSum(remainder, nums, memo)
  • 补全最后一行测试用例缺失的右括号,避免语法错误

修正后完整代码

def howSum(targetSum, nums, memo = None):
    if memo is None:
        memo = {}
        
    if targetSum in memo: return memo[targetSum]
    if targetSum < 0: return None
    if targetSum == 0: return []
    
    for num in nums:
        remainder = targetSum - num
        remainderResult = howSum(remainder, nums, memo)
        
        if remainderResult is not None:
            remainderResult.append(num)
            memo[targetSum] = remainderResult
            return memo[targetSum]
        
    memo[targetSum] = None
    return None

print(howSum(7, [2, 3])) # [3,2,2]
print(howSum(7, [5, 3, 4, 7])) # [4,3]
print(howSum(7, [2, 4])) # None
print(howSum(8, [2, 3, 5])) # [2,2,2,2]
print(howSum(300, [7,14])) # None

修改后最后一个测试用例可以秒返回结果。

内容的提问来源于stack exchange,提问作者Semeriuss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:51:04