python - 函数 if True 返回组合列表
问题描述
我正在关注动态编程视频。但是,对于下面显示的给定数字集,返回为 False。它应该显示 [3,4]
如果我将“组合”更改为 True。它将返回 True。但是我想展示这个组合。
combo = list()
def howsum(targetsum,numbers):
if targetsum == 0: return combo
if targetsum < 0: return False
for number in numbers:
remainder = targetsum - number
combo.append(number)
if howsum(remainder,numbers) == True: return combo
return False
print(howsum(7,[3,4])) #output should be [3,4]
解决方案
这里的问题是您正在检查返回值是否为 True,而不是它是否存在。空集合的真实性是False
,非空集合的真实性是True
。同样对于回溯,您需要pop()
从当前组合中尝试替代方案。
combo = list()
def howsum(targetsum, numbers):
if targetsum == 0: return combo
if targetsum < 0: return False
for number in numbers:
remainder = targetsum - number
combo.append(number)
if howsum(remainder, numbers): return combo
combo.pop()
return False
print(howsum(7, [3, 4])) # output should be [3,4]
还有一件事要注意。combo
我们可以通过引入辅助函数将其作为参数传递,而不是创建全局列表。
def howsum_helper(targetsum, numbers, combo):
if targetsum == 0: return combo
if targetsum < 0: return False
for number in numbers:
remainder = targetsum - number
combo.append(number)
if howsum_helper(remainder, numbers, combo): return combo
combo.pop()
return False
def howsum(targetsum, numbers):
return howsum_helper(targetsum, numbers, [])
print(howsum(7, [3, 4])) # output should be [3,4]
此解决方案还假设可以重复数字列表中的数字以达到targetSum
.
推荐阅读
- javascript - Selectbox 中的 ListItem 预选(选中)
- html - Chrome 输入字段不显示 Windows 数字小键盘(tabtip)
- javascript - 如何获取字符串中的符号数
- python - 如何绘制每列都是不同函数的 2D numpy 数组?
- hive - 如何为 Hive 查询生成随机数_only once_?
- javascript - 在脚本加载出现 CORS/安全问题之前将 div 属性更改为随机字符串我相信
- ruby - 如何检查 YAML 字符串是否排除任何有用信息
- angular - 如何获取动态生成的组件的引用
- jquery - 如果单击复选框,则始终选中表格列 JQuery
- javascript - 位操作中的掩码匹配