【发布时间】:2021-02-17 12:20:56
【问题描述】:
由于我的代码运行时间过长,我未能通过自动筛选考试的几个测试用例。有没有办法更有效地写这个?
提示是这样的:
编写一个程序,将一个列表作为输入,并返回成对连接其元素的所有组合的总和。
例如,对于列表 [20, 5],这将是:
2020 + 205 + 520 + 55 = 2800
如果不强制转换为字符串并返回 int,我仍然想不出一种方法。列表推导以前嵌套在 for 循环中,性能较差,但我仍然需要更快的速度。
def concatenationsSum(a):
# turn into strings
a = [str(i) for i in a]
# concat
cartesian_product = [j + k for j in a for k in a]
# turn back into integers
total = [int(i) for i in cartesian_product]
return sum(total)
【问题讨论】:
-
想想 A 和 B 各自贡献于 AB 的总和的 值。然后考虑所有 A 的贡献,最后是所有 B 的贡献。
-
你能换个说法吗?我不明白。
-
从你的例子:2020+205+520+55 = 20*100+20 + 20*10+5 + 5*100+20 + 5*10+5 = (20+5)* 100 + (20+5)*10 + (20+5)*2。
标签: python-3.x sum cartesian-product