我正在尝试解决Coderbyte的简单部分中的问题,提示如下:
函数ArrayAdditionI(arr)接受存储在arr中的数字数组,并返回字符串true,如果数组中的任何数字组合可以相加得到最大数字,则返回true,否则返回false。例如:如果arr包含[4, 6, 23, 10, 1, 3],则输出应返回true,因为4 + 6 + 10 + 3 = 23。该数组不会为空,不会包含完全相同的元素,并且可能包含负数。
这是我的解决方案。
函数ArrayAdditionI(arr)接受存储在arr中的数字数组,并返回字符串true,如果数组中的任何数字组合可以相加得到最大数字,则返回true,否则返回false。例如:如果arr包含[4, 6, 23, 10, 1, 3],则输出应返回true,因为4 + 6 + 10 + 3 = 23。该数组不会为空,不会包含完全相同的元素,并且可能包含负数。
这是我的解决方案。
def ArrayAddition(arr):
arr = sorted(arr, reverse=True)
large = arr.pop(0)
storage = 0
placeholder = 0
for r in range(len(arr)):
for n in arr:
if n + storage == large: return True
elif n + storage < large: storage += n
else: continue
storage = 0
if placeholder == 0: placeholder = arr.pop(0)
else: arr.append(placeholder); placeholder = arr.pop(0)
return False
打印ArrayAddition([2,95,96,97,98,99,100])
我甚至不确定这是否正确,但似乎覆盖了我输入的所有数字。我想知道是否有更好的算法来解决这个问题,但我对算法一无所知。我认为通过一个for循环内嵌另一个for循环等等的方式可以解决问题,但我不知道如何做到这一点。
我的想法是通过A+B,A+C,A+D ... A+B+C ... A+B+C+D+E来完成这个任务。
例如)
for i in range(len(arr):
print "III: III{}III".format(i)
storage = []
for j in range(len(arr):
print "JJ: II({}),JJ({})".format(i,j)
for k in range(len(arr):
print "K: I{}, J{}, K{}".format(i,j,k)
我已经搜索了很多,发现了itertool的建议,但是我想知道是否有一种更原始的方法来编写这个代码。
谢谢。