package gleichung;

/**
 * Routine zur Bestimmung von Kombinationen mit Wiederholung.
 * Abgespeckte Version meiner Klasse mathe.Perm
 *
 * @author Christian Semrau, 28.11.2001
 * <a href=mailto:chsemrau@gmx.de>chsemrau@gmx.de</a>
 */
public class Perm {

// keine Instanzen erlauben
protected Perm() {}

/**
 * Liefert die auf <code>akt</code> folgende Kombination (mit Wdh,
 * mit Beachtung der Reihenfolge).
 * Wenn <code>akt</code> bereits die letzte war, wird <code>null</code> geliefert.
 * Prueft nicht, ob <code>akt</code> gueltig ist.
 *
 * @return int[] - die naechste Auswahl von Moeglichkeiten, oder null
 * @param lengs int - die Anzahl der Moeglichkeiten an den Stellen
 * @param akt int[] - die aktuelle Auswahl der Moeglichkeiten
 */
public static int[] nextComb_mWmR(int lengs, int[] akt) {
	if (akt==null||akt.length<=0) return null;
	int[] next = (int[])akt.clone();
	int k=next.length-1;
	boolean finished = false;
	do{
		next[k]++;
		if (next[k]>=lengs){
			next[k--]=0;
		}else finished=true;
	}while(!finished && k>=0);

	return (k>=0) ? next : null;
}


}