我尝试用 Python 解决 Best Sum 问题,但无法找出问题所在,请提出问题所在

2023-11-30

该函数应返回一个数组,其中包含加起来正好等于目标总和的最短数字组合。如果有两种(或多种)可能性,则返回其中任何一种。

def bestSum(targetSum, numbers, memo = {}):
    if targetSum in memo: return memo[targetSum]
    if targetSum == 0: return []
    if targetSum < 0: return None
    
    shortestCombination = None
    for num in numbers:
        remainder = targetSum - num
        remainderCombination = bestSum(remainder, numbers, memo)
        
        if remainderCombination is not None:
            remainderCombination.append(num) 
            if shortestCombination is None or len(remainderCombination) < len(shortestCombination):                
                shortestCombination = remainderCombination
            
    memo[targetSum] = shortestCombination
    return memo[targetSum]

输入调用:bestSum(4, [2,1])

Output: [2, 2, 1]

预期输出:[2,2]


所以解决方案非常简单,但我当时没有注意到。而不是像这样复制列表shortestCombination = remainderCombination 我们应该使用shortestCombination = remainderCombination.copy()这样shortestCombination和remainsCombination就不会指向内存中的同一个List。

这是正确的代码,也具有良好的性能

def bestSum(targetSum, numbers, memo = {}):
    if targetSum in memo: return memo[targetSum]
    if targetSum == 0: return []
    if targetSum < 0: return None
    
    shortestCombination = None
    for num in numbers:
        remainder = targetSum - num
        remainderCombination = bestSum(remainder, numbers, memo)
        
        if remainderCombination is not None:
            remainderCombination.append(num) 
            if shortestCombination is None or len(remainderCombination) < len(shortestCombination):                
                shortestCombination = remainderCombination.copy()
            
    memo[targetSum] = shortestCombination
    return shortestCombination
    
if __name__ == '__main__':
    print(bestSum(4, [2, 1]))    #Output  [2, 2] 

    print(bestSum(300, [2, 7]))
    #Output 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
    #       7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我尝试用 Python 解决 Best Sum 问题,但无法找出问题所在,请提出问题所在 的相关文章

随机推荐

  • java 发送和接收二维数组

    我想通过问这个问题来实现的是学习如何发送和接收二维数组到另一台计算机 上下文是二维阵列是我的游戏的地图 当我开始游戏时 我想要一个选项是服务器还是客户端 如果是客户端 请指定服务器IP 然后服务器将发送客户端 其中一个将是另一个人 具有不同
  • 与 C# 的协方差

    我在 C 代码中遇到了一些有趣的协方差问题 我有一个通用的Matrix
  • 使用 JavaScript 的事件委托比 jQuery 的事件委托是否有性能优势?

    JavaScript parent addEventListener click function e if e target child code vs jQuery parent on click child function 边际 j
  • tomcat 7 基于表单的身份验证

    给定一个 Servlet HelloServlet WebServlet HelloServlet public class HelloServlet extends HttpServlet private static final lon
  • 输入类型“textVisiblePassword”与“text”:有什么区别?

    简短而甜蜜 我不知道有什么区别textVisiblePassword and text是 关于inputType在 EditText 上 根据文档 textVisiblePassword是 应该可见的密码文本 其中密码是无用的 密码文本 有
  • SQL 查询最流行的组合

    假设我有一个带有采购表的杂货店应用程序 customerId int itemId int 四位顾客走进店里 Bob buys a banana lemonade and a cookie Kevin buys a banana lemon
  • Javascript 特征模式资源

    有人可以推荐在 javascript 中使用 Trait 的好资源吗 经过一番搜索后 我主要找到有关提供特征功能的库的文章 但我很好奇如何在没有库的情况下实现特征的最佳实践 我在 SO 上看到这篇文章 还有其他方法吗 JavaScript
  • 使用 DataSnap 进行大流处理

    我试图在 DataSnap 服务器 客户端之间传输一些大流 1Mb 但无济于事 我试图理解吉姆 蒂尔尼的代码 http blogs embarcadero com jimtierney 2009 04 06 31461 运气不好 我什至无法
  • 如何在 Win32 C++ 项目中使用 C# dll?

    我正在研究一个解决方案 它的大部分核心引擎都是作为 Win32 C 开发的 并且与平台无关 也在 OS X 上使用 前段时间我们需要从 C 调用核心引擎的 C dll 我能够在 C 中加载主解决方案的 DLL 在 SO 上的一些线程的帮助下
  • 从 C# 中的 REST 服务下载文件

    我正在尝试将文件保存到客户端的计算机上 我想要求客户端选择下载位置 我有 REST 服务的端点 它返回要下载的文件 我正在尝试设置代码来下载从服务返回的文件另存为对话框 var Url https randomaddresss v5 inv
  • 如何获取特定文件的图标或缩略图

    我正在寻找一种方法来获取与 Linux 上特定文件类型关联的图标 使用 shell 脚本或 python 我更喜欢适用于所有平台的本机 python 方法 但 shell 脚本方法也可以 我找到了一个解决方案 并且编写了一个函数来完成这项工
  • 将源文件包含在可运行的 jar 文件中

    I have to create the installer with runnable jar file when the jar file will run it has to copy the files on some direct
  • 扫描 BLE 设备的位置要求

    从 Marshmallow 开始 BLE 扫描面临着显着差异 要求设备位置处于开启状态 从技术上讲 我没有看到需要位置来扫描 BLE 设备的合理原因 谷歌为何这么做 问 谷歌为什么要这么做 答 因为 BLE 扫描通常用于通过蓝牙 LE 信标
  • 子类化 int 并覆盖 __init__ 方法 - Python [重复]

    这个问题在这里已经有答案了 可能的重复 从 str 或 int 继承 嗨伙计 我试图对 int 类进行子类化 但没有成功 这是我的尝试 class SpecialInt int def init self x base 10 importa
  • 当在枚举值中使用类函数时,“函数”对象没有属性“值”

    我只是想获得一些额外的东西 这是operator像python的模块not contain 为此 我创建了自己的课程not contain方法 我只是想做一些更多的变化 为此我需要上课 我用的是python3 class UserDefin
  • 具有属性和限制的 XSD 自定义类型

    我正在开发一个 XSD 文档来验证 XML 导入文件 导入文件的几乎所有元素都 可以 具有 ID 属性 UPDATE UPDATE 属性必须限制为 4 个可能的值 因此我有此预设类型用于属性限制
  • SQL varchar 列长度的最佳实践[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 每次都是建立一个新的SQL表或者添加一个新的varchar列到现有表中 我想知道一件事 什么是最佳价值length 所以 假设您有一个名为name类型的varchar 所以 你必须选择长度
  • `` 模板语法 - 优雅降级

    新的 javascript 模板语法很棒 超级可读且功能强大 我想开始使用它 我尝试过这个模板 function addGalleryItem imageData file try var template section class im
  • C# 正则表达式 - 仅在子字符串存在时匹配?

    好的 所以我想我已经掌握了否定的处理方法 现在只选择其中包含指定子字符串的匹配项怎么样 Given This is a random bit of information from 0 to 1 This is a non random b
  • 我尝试用 Python 解决 Best Sum 问题,但无法找出问题所在,请提出问题所在

    该函数应返回一个数组 其中包含加起来正好等于目标总和的最短数字组合 如果有两种 或多种 可能性 则返回其中任何一种 def bestSum targetSum numbers memo if targetSum in memo return