Python - 数字的组合求和大于或等于值

时间:2017-08-31 02:20:54

标签: python permutation dynamic-programming number-theory

我最近在Python中提出了以下面试问题 - 给出一个数量 - 价值对的列表,找到其总和尽可能接近并且至少与其一样大的值组的最佳组合。 ,一些提供的价值。

例如,给定:[(1,$ 5),(3,$ 10),(2,$ 15)],以及36美元的期望值,答案是[(2,$ 15),(1,$ 10) )]或[(1,$ 15),(2,$ 10),(1,$ 5)]。原因是40美元是可以实现的最大金额大于或等于36美元,这是实现这一总和的两种方式。

我很难过。有没有人有解决方案?

1 个答案:

答案 0 :(得分:1)

数字太小了你可以强行说出来:

const generateCanadianPostalCode = (separator = " ") => {
  const letters = generateLetters(3);
  const numbers = generateNumbers(3);
  const sequence = interleave(letters, numbers);
  const halves = [
    sequence.slice(0, 3).join(""),
    sequence.slice(3).join(""),
  ];
  return halves.join(separator);
};

您可以为所有组合扩展此功能,只需将In []: notes = [(1, 5), (3, 10), (2, 15)] wallet = [n for a, b in notes for n in [b]*a] combs = {sum(x): x for i in range(1, len(wallet)) for x in it.combinations(wallet, i)} target = 36 for i in sorted(combs): if i >= target: break i, combs[i] Out[]: (40, (5, 10, 10, 15)) 词典理解替换为:

combs