解决“从一组数中找到一些数字,使和等于特定值”的小工具

258 天前
 zyx199199

去年底帮公司整理年度财务数据时,遇到一个问题:

一个员工的几笔报销加起来一共几千块,已经一次性给员工报销掉了,但是到年底整理财务数据时,发现已经无法将当时那笔报销款与发票对应上了。

实际上只要找到哪几张发票的金额总和大体上约等于那笔报销款就行,因为发票是后来找了好几张凑出来的,所以也不是正好等于那笔报销款。印象中是相差了十几块钱。

我当初傻傻地人工对照整理了好几十分钟,才确定下来。

前两个月又想起来这个事,上网搜了下有没有好的解决方案,发现用 Excel 能勉强求解。但是 Excel 求解有两个问题:

所以我自己写了个 Google Sheets 的插件。不知道有没有人有类似的需求。

插件地址: https://workspace.google.com/marketplace/app/add_up_to/1020284067440

我这个插件支持:

975 次点击
所在节点    分享创造
1 条回复
coolzqy
256 天前
def find_closest_sum_dp(numbers, target):
dp = {0: []}

for num in numbers:
new_dp = dp.copy()
for partial_sum, combo in dp.items():
new_sum = partial_sum + num
if new_sum not in dp or abs(target - new_sum) < abs(target - partial_sum):
new_dp[new_sum] = combo + [num]
dp = new_dp

closest_sum = min(dp, key=lambda x: abs(target - x))
return dp[closest_sum]

numbers = [1, 2, 3, 4, 5]
target = 9
result = find_closest_sum_dp(numbers, target)
print(result)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX