Ich muss ein Programm schreiben, das alle verschiedenen Möglichkeiten zum Klammern einer Zeichenfolge zurückgibt. Zum Beispiel, wenn die gegebene Zeichenfolge „ABCD“ ist, dann haben wir genau diese fünf unterschiedlichen Ergebnisse:So drucken Sie die verschiedenen Möglichkeiten der Zeichenfolge in Klammern
((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))
Die Anzahl der Klammern sind abhängig von der Länge der Saite natürlich, aber ich dachte, dass die Länge die Zeichenfolge-2 ist geeignet (wir haben keine Ahnung von der Anzahl der Klammern, die wir verwenden können ...). Es scheint einfach zu sein: Ich muss nur Klammern in jede mögliche Position einfügen. Ich denke, dass Rekursion hier geeignet ist.
Ich habe versucht, dies zu schreiben:
private static ArrayList<String> generateParens(String string, ArrayList<String> list, int leftRem, int rightRem, char[] str, int count) {
if (leftRem < 0 || rightRem < leftRem) return null;
if (leftRem == 0 && rightRem == 0) { /* all out of left and right parentheses */
String s = String.copyValueOf(str);
list.add(s);
} else {
if (leftRem > 0) { // try a left paren, if there are some available
str[count] = '(';
str[count+1] = string.charAt(count);
generateParens(string, list, leftRem - 1, rightRem, str, count+1);
}
if (rightRem > leftRem) { // try a right paren, if there’s a matching left
str[count] = string.charAt(count);
str[count+1] = ')';
generateParens(string, list, leftRem, rightRem - 1, str, count + 1);
}
}
return list;
}
public static ArrayList<String> generateParens(String string) {
char[] str = new char[string.length()*2]; //because we have a PAIR of parenthese
ArrayList<String> list = new ArrayList<String>();
String str2 = string + string;
return generateParens(str2, list, string.length()-2, string.length()-2, str, 0);
}
ich eine rekursive Funktion zu schreiben versucht, aber ich bin nicht sehr gut in Rekursion, so habe ich eine Menge Probleme, vor allem mit Indizes. Ich habe viele Dinge ausprobiert, aber ich habe immer noch Probleme. Ich bin mir nicht sicher, ob es nur an den Indizes liegt).
Können Sie mir bitte helfen, das zu beheben?
Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier.Wir können Ihnen nicht effektiv helfen, bis Sie Ihren Code * und * das Problem genau beschreiben. Sie haben uns keine Fehlermeldungen oder Ausgaben mitgeteilt. Dein Code hat kein Hauptprogramm, um Dinge zu testen. Bitte liefern Sie diese, damit wir Ihnen anständig helfen können. – Prune
Sind Sie verwirrt darüber, wie Sie das mit Rekursion erreichen können? Wenn ja, dann erhalten Sie einen Pseudocode, den Sie implementieren können. – Compass