def count_list_aux(num_possibilities, a_list, i, j):
if i == j: # Only 1 item to check now.
if a_list[i] == 10: # The item itself is 10 so that can be a combo.
return num_possibilities + 1
else: # Otherwise we are done.
return num_possibilities
else:
combo = a_list[i] + a_list[j]
if combo == 10: # (4,6) for instance.
return count_list_aux(num_possibilities+2, a_list, i+1, j-1)
elif combo > 10: # (4,8) for instance. Clearly 8 needs to go when we have a sorted list.
return count_list_aux(num_possibilities, a_list, i, j-1)
else: # (4,7) for instance. Clearly 4 needs to go when we have a sorted list.
return count_list_aux(num_possibilities, a_list, i+1, j)
def countsum(a_list):
a_list = sorted(a_list)
return count_list_aux(0, a_list, 0, len(a_list)-1)
print(countsum([4,6,3,7,5,2,8]))
ich eine rekursive Lösung gemacht haben, wo ich einfach die Liste sortieren (aufsteigende Reihenfolge) und dann rekursiv addieren sich am weitesten links stehende (i
) und am weitesten rechts stehende (j
) und prüfen, ob sie zu 10 addieren. Wenn sie das tun, dann inkrementiere ich num_possibiltiies
um 2 (zB 6,4 und 4,6 sind 2 Combos). Wenn die Summe größer als 10 ist, dekrementiere ich um 1, da der aktuelle Index j
nicht mit anderen Werten in der Liste arbeiten kann (Liste ist sortiert). Ähnlich, wenn die Summe kleiner als 10 ist, inkrementiere ich i
um 1, da der aktuelle Index i
nicht mit anderen Werten arbeiten kann, um eine Summe von 10 zu erhalten (es ist mit dem größten Wert am Index j
gescheitert).
Würde dies für Listen funktionieren, die mehr als eine Länge von 2 haben? – Jessica
Ja, ich habe es ausprobiert. –
Wenn Sie nicht sicher sind, können Sie meinen Code testen. Der obige Code testet auf "[4,6,3,7,5,2,8]" und gibt 6 aus, wie wir (4,6), (6,4), (3,7), (7 , 3), (2,8), (8,2). Wenn Sie diese Antwort nützlich finden, wäre es sehr hilfreich, wenn Sie das "Häkchen" neben meiner Antwort drücken. Auf diese Weise wissen zukünftige Benutzer, dass dies eine funktionierende Lösung für Ihr Problem ist. –