Permutationen: Unterschied zwischen den Versionen
(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, 07: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;
}
}