You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复coinChange函数错误,实现返回凑成指定金额的1/2/5/10元钞票列表

现有代码问题分析
  • 变量x未提前定义就直接在判断条件中使用,代码运行会直接抛出NameError错误。
  • while循环的判断逻辑完全不成立:没有任何数值可以同时等于1、2、5、10四个不同的整数,循环体永远不会执行。
  • 功能逻辑和需求完全不匹配:现有代码仅尝试判断4个相同数值相加是否等于目标金额,且返回值为单个数值,和“输出所有凑数面值组成的列表”的要求不符。
正确实现方案

你的需求可以通过贪心算法实现,由于本题给定的1、2、5、10面值符合贪心选择性质,优先用最大面值凑数就能得到符合示例要求的结果,实现代码如下:

def coinChange(v: int) -> list:
    # 按面值从大到小排序,优先使用大面值
    denominations = [10, 5, 2, 1]
    result = []
    remaining_amount = v
    for d in denominations:
        # 计算当前面值最多可使用的张数
        count = remaining_amount // d
        if count > 0:
            # 将对应数量的面值加入结果列表
            result.extend([d] * count)
            # 扣除已凑出的金额
            remaining_amount -= count * d
        # 金额已凑完,提前终止循环
        if remaining_amount == 0:
            break
    return result

调用测试coinChange(38)即可得到输出[10,10,10,5,2,1],和需求示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:06:02