Permutationen: Unterschied zwischen den Versionen

Aus MimiPedia
(Die Seite wurde neu angelegt: „public class Perm<T> { public Consumer<List<T>> verbraucher; void laufe(List<T> p, Set<T> rSet) { if (rSet.isEmpty()) { verbraucher.accept(p); }…“)
 
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
<pre>
public class Perm<T> {
public class Perm<T> {


Zeile 30: Zeile 31:
}
}
}
}
</pre>

Aktuelle Version vom 29. September 2022, 08:05 Uhr

public class Perm<T> {

	public Consumer<List<T>> verbraucher;

	void laufe(List<T> p, Set<T> rSet) {
		if (rSet.isEmpty()) {
			verbraucher.accept(p);
		}

		for (T r : rSet) {
			laufe(add(p, r), ohne(rSet, r));
		}
	}

	private List<T> add(List<T> p, T r) {
		if (p == null) {
			return List.of(r);
		}
		var copy = new ArrayList<T>();
		copy.addAll(p);
		copy.add(r);
		return copy;
	}

	private Set<T> ohne(Set<T> rSet, T r) {
		var copy = new HashSet<T>();
		copy.addAll(rSet);
		copy.remove(r);
		return copy;
	}
}