如何修复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
相关产品推荐
相关产品推荐

