2017-11-06 4 views
0

Ich versuche, die Kombinationsaufgabe in Scala zu lösen. Ich habe ein Array mit wiederholten Elementen und ich muss die Anzahl der Kombinationen zählen, die die Bedingung a + b + c = 0 erfüllen. Zahlen sollten nicht wiederholt werden, wenn sie an verschiedenen Stellen sind, zählt es nicht als eine eindeutige Kombination. Also habe ich mein Array in Set verwandelt, damit sich die Elemente nicht wiederholen. Auch habe ich über Kombinationen Methode für Sequenzen gefunden, aber ich bin nicht wirklich sicher, wie man es in diesem Fall verwendet. Außerdem weiß ich nicht, wo diese Permutationsbedingung steht. Hier ist, was ich habe jetzt:Permutationen mit Prädikat Scala

var arr = Array(-1, -1, -2, -2, 1, -5, 1, 0, 1, 14, -8, 4, 5, -11, 13, 5, 7, -10, -4, 3, -6, 8, 6, 2, -9, -1, -4, 0) 
val arrSet = Set(arr) 
arrSet.toSeq.combinations(n) 

Ich bin neu in Scala, so würde ich für jeden Rat wirklich dankbar!

+0

hast du https://stackoverflow.com/questions/13109720/how-to-create-all-possible-combinations-from-the-elements-of-a-list überprüft? –

+0

tat ich. Aber ich muss Kombinationen durch ein Prädikat erhalten, nicht alle möglich. Es war also nicht wirklich hilfreich – Cassie

Antwort

3

Hier ist, was Sie brauchen:

arr.distinct.combinations(3).filter(_.sum == 0).size 

wo:

  • distinct die, indem sie nur diejenigen, deren Summe
  • combinations(n) produziert Kombinationen von n Elemente
  • filter Filter sie
  • Duplikate entfernt ist 0
  • size gibt die Gesamtzahl solcher Kombinationen

P. S .: arr brauchen nicht ein var zu sein. Sie sollten sich bemühen, niemals var in Scala zu verwenden und so lange wie möglich bei val zu bleiben.

+0

Danke. Es ist ein netter Ansatz. Besonderer Dank für die Erklärung :) – Cassie

+0

Gern geschehen Cassie. :) – lambdista