Alle möglichen Kombinationen

Snape

Erfahrenes Mitglied
Moin,
ich steh grad auf der Leitung, hab aber auch nicht ganz den Kopf frei, länger darüber nachzudenken:

Wie kann ich mir alle möglichen Kombinationen eines Wortes oder einer Zahlenkombination ("73485784" oder auch "waldameise" o.ä.) ausgeben lassen, ohne dabei doppelte Ergebnisse geliefert zu bekommen?
 

vop

Erfahrenes Mitglied
Hi

vielleicht hilft Dir dieser Thread (allerdings in PHP) etwas weiter
http://www.tutorials.de/tutorials221304.html

Da habe ich mal eine PHP-Lösung gepostet.

Wenn Du die in java umbastelst, anschließend die Einträge in eine sortierte Stringliste einfügst (und dabei doppelte Einträge überspringst), sollstest Du alles haben, oder?

Beachte aber: Es gibt eine ganze Menge Kombinationen.
Vielleicht ist bei längeren Wörtern statt der rekursiven besser eine iterative Lösung zu nehmen.

vop
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!
Code:
 package de.tutorials;
 
 public class Permutation {
 
 	static int anz = 0;
 	static int maxIndex;
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 
 		String s = "123a";
 		maxIndex = s.length()-1;
 		permut(s.toCharArray(),maxIndex);
 		
 	}
 	
 	static void swap(char[] a, int i, int j) {
 		char temp = a[i];
 		a[i] = a[j];
 		a[j] = temp;
 	}
 	
 	static void permut(char[] a, int endIndex) {
 		if (endIndex==0){
 			print(a);
 			anz++;
 		}else{
 			permut(a, endIndex-1);
 			for (int i=0; i<=endIndex-1; i++){
 				swap(a, i, endIndex);
 				permut(a, endIndex-1);
 				swap(a, i, endIndex);
 			}
 		}
 	}
 	
 	static void print(char[] a) {
 		System.out.println(String.valueOf(a));
 	}
 }

gruß Tom
 

jimb0p

Erfahrenes Mitglied
Wie würde man vorgehen wenn man eine feste Länge vorgibt, bspw. 5 und ein Zeichen häufiger vorkommen darf. Ich aber ein Alphabet vorgebe was größer ist als die Wortlänge. Nehmen wir an das Alphabet ist "A" "B" "C" "D" "E" "F":

AAAAA
AAAAB
AAAAC
...
FFFFF
 

zerix

Hausmeister
Moderator
Hallo,

hier mal ein kleines Beispiel, wie man es machen könnte.

Java:
public class Example{

	public static void main(String args[]){

		String alphabet = "ABCDEF";
		int length = 5;
		int a[] = new int[length];
		String newString = "";

	

		for(int i = 0; i < Math.pow(alphabet.length(),length); i++){

			for(int j = 0; j < a.length; j++){
				newString += alphabet.charAt(a[j]);
			}
			System.out.println(newString);
			newString = "";
			int tmp = i;
			int counter = a.length-1;
			while(tmp != 0){
			
				a[counter] = tmp % alphabet.length();
				tmp /= alphabet.length();
				counter--;
			}

		}
	}
}

Viele Grüße

Sascha