Ich bin gespannt, wie ich meine permuteAndPrintValuesThreeLists_Iterative
Methode rekursiv durchführen kann ... Ich kenne grundlegende Rekursion zum Sortieren von Arrays und Ausführen von binären Suchen, aber ich kann nicht herausfinden, wie es meine Methode rekursiv machen.Rekursive Permutation mit mehreren Listen
Der Grund, warum ich Rekursion verwenden möchte, ist, weil ich die Möglichkeit haben möchte, mehr als 3 Listen hinzuzufügen, ohne meine Methode zu ändern, indem ich eine weitere for-Schleife hinzufüge.
Frage: Wie schreibe ich permuteAndPrintValuesThreeLists
Methode als recursive
Methode?
Meine Ausgabe sollte sein:
1 1 10 10 100 100
1 1 10 10 200 200
1 1 10 10 300 300
1 1 20 20 100 100
1 1 20 20 200 200
1 1 20 20 300 300
2 2 10 10 100 100
2 2 10 10 200 200
2 2 10 10 300 300
2 2 20 20 100 100
2 2 20 20 200 200
2 2 20 20 300 300
Aber es ist:
1 1 10 10 100 100
200 200
300 300
400 400
20 20 100 100
200 200
300 300
400 400
3 3 10 10 100 100
200 200
300 300
400 400
20 20 100 100
200 200
300 300
400 400
final class Problem {
public static void main(String[] args) {
Problem p = new Problem();
p.permuteAndPrintValuesThreeLists_Iterative();
}
private static List<int[]> l1;
private static List<int[]> l2;
private static List<int[]> l3;
private Problem() {
l1 = new ArrayList<>();
l1.add(new int[] { 1, 1 });
l1.add(new int[] { 2, 2 });
l2 = new ArrayList<>();
l2.add(new int[] { 10, 10 });
l2.add(new int[] { 20, 20 });
l3 = new ArrayList<>();
l3.add(new int[] { 100, 100 });
l3.add(new int[] { 200, 200 });
l3.add(new int[] { 300, 300 });
}
private static void permuteAndPrintValuesThreeLists_Iterative() {
for (int i = 0; i < l1.size(); i++) {
for (int j = 0; j < l2.size(); j++) {
for (int k = 0; k < l3.size(); k++) {
printArray(l1.get(i));
printArray(l2.get(j));
printArray(l3.get(k));
System.out.println();
}
}
}
}
private static void printArray(int[] a) {
for (int i : a) {
System.out.println(i + " ");
}
}
}
Bisher wusste ich, ich brauche eine Liste zu haben, die die 3-Listen enthält (in In meinem Fall habe ich eine HashMap hinzugefügt. Ich habe auch diese Lösung Methode, die teilweise das Problem
private static Map<Integer, List<int[]>> allLists = new HashMap<>();
private static void permuteAndPrintValuesThreeLists_Recursion(List<int[]> resultList, int mapIndex) {
if (mapIndex == allLists.size()) {
// Debug code
for (int[] arr : resultList)
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i] + " ");
resultList.clear();
System.out.println();
return;
}
for (int i = 0; i < allLists.get(mapIndex).size(); i++) {
int[] tmpArray = allLists.get(mapIndex).get(i);
resultList.add(tmpArray);
permuteAndPrintValuesThreeLists_Recursion(resultList, mapIndex + 1);
}
}
Willkommen bei Stack Overflow! Wir sind eine Frage-und-Antwort-Seite, kein Coder-for-Hire-Service. Bitte erläutern Sie, was Sie bisher versucht haben und warum es nicht funktioniert hat. –
Dies kann Ihnen eine Idee geben, obwohl es für das generalisierte Problem ist, alle Permutationen eines Strings "abc" zu finden. Nehmen wir an, Ihre Funktion heißt Dauerwelle und benötigt eine Zeichenkette als Eingabe und eine Liste von Zeichenketten als Ausgabe. Der Basisfall der Rekursion ist, wenn die Zeichenfolge ein Zeichen lang ist. Geben Sie einfach eine einzelne Liste zurück, die nur ein Zeichen enthält (Fortsetzung ...) –
Für den rekursiven Fall werden perms (Zeichenfolge mit dem Index 0..n-1) für jede von perms zurückgegebene Permutation (Zeichenfolge mit dem Index 1..n -1), fügen Sie die Zeichenfolge [0] in die Permutation bei Index 0, Index 1, Index 2 .. und am Ende der Zeichenfolge ein. Gebe diese Liste von Strings zurück, die 'n' faktoriell lang sein wird. –