【发布时间】:2021-08-14 20:32:58
【问题描述】:
该函数应返回一个数组,其中包含加起来正好等于目标总和的最短数字组合。如果有两种(或更多)可能性,则返回其中任何一种。
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])
输出:[2, 2, 1]
预期输出:[2,2]
【问题讨论】:
标签: python arrays recursion memoization